Мой вопрос очень похож на этот . Я попытался адаптировать их решение под свои нужды, но, похоже, не нашел решения для моего JSON.
Вот пример JSON:
{
"0fea8f8a-4169-495d-8307-50bc333fd87d": {
"serviceId": "4cb9125a-1eaa-4bd4-a473-cfccec0f3c63"
},
"0564d078-94f5-4f97-8398-b9f58a51f70b": {
"serviceId": "00000000-0000-0000-0000-000000000000"
},
"f9a165d2-967d-4733-8599-1074270dae2e": {
"serviceId": "00000000-0000-0000-0000-000000000000"
},
"86ccdsbf-e7ad-4851-93ff-6ec817469c1e": {
"serviceId": "00000000-0000-0000-0000-000000000000"
}
}
Как видите, это серия (а не массив) Id_1 : {serviceId: Id_2}
I думаю, что это проще всего представить в классе C# как-то вроде этого: List<KeyValuePair<string, string>>
, в основном список <Id_1, Id_2>
, но я открыт для альтернатив.
Вот моя попытка решения, основанного на связанной публикации выше:
class PolicyMetadata
{
[JsonConverter(typeof(MetadataConverter))]
public KeyValuePair<string,string>[] idPairs { get; set; }
}
class MetadataConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// deserialize as object
var pairs = serializer.Deserialize<JObject>(reader);
var result = new List<KeyValuePair<string, string>>();
// create an array out of the properties
foreach (JProperty property in pairs.Properties())
{
var pair = property.Value.ToObject<KeyValuePair<string, string>>();
result.Add(pair);
}
return result.ToArray();
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(KeyValuePair<string, string>[]);
}
}
И я называю это здесь: var response = JsonConvert.DeserializeObject<PolicyMetadata>(content);
Но это приводит к нулевому значению, поэтому я определенно делает что-то не так. Я пробовал размещать точки останова и операторы печати в методе Read Json, но они никогда не запускались, поэтому я не уверен, действительно ли этот код выполняется.