Десерилиазация JSON с изменяющимися именами полей c#
Не могу понять как десерилиазовать json ответ от сервера, в котором возращается массив объектов в каждом из которых поле имеет разное имя.
{
"status":1,
"msg":"ok",
"data":[
{
"2020-08-21":4
},
{
"2020-08-22":1
},
{
"2020-08-24":1
}
]
}
Подскажите, пожалуйста, как можно реализовать десерелизацию. Использую библиотеку Newtonsoft.Json
Ответы (1 шт):
Автор решения: motpfofs
→ Ссылка
Попробуйте воспользоваться этим кодом:
public static void Main()
{
var jsonString = @"{""status"":1,""msg"":""ok"",""data"":[{""2020-08-21"":4},{""2020-08-22"":1},{""2020-08-24"":1}]}";
var deserializedResult = JsonConvert.DeserializeObject<JsonObject>(jsonString);
}
public class JsonObject
{
public int Status { get; set; }
public string Msg { get; set; }
[JsonConverter(typeof(MyDateTimeConverter))]
public MyDateTime[] Data { get; set; }
}
public class MyDateTime
{
public DateTime Date { get; set; }
public int Value { get; set; }
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var result = new List<MyDateTime>();
if (reader.TokenType == JsonToken.StartObject)
{
var instance = serializer.Deserialize<JObject>(reader);
foreach (JProperty property in instance.Properties())
{
result.Add(new MyDateTime
{
Value = property.Value.ToObject<int>(),
Date = DateTime.Parse(property.Name)
});
}
}
else if (reader.TokenType == JsonToken.StartArray)
{
var myDateTimes = serializer.Deserialize<JArray>(reader);
foreach (var myDateTime in myDateTimes)
{
foreach (JProperty property in ((JObject)myDateTime).Properties())
{
result.Add(new MyDateTime
{
Value = property.Value.ToObject<int>(),
Date = DateTime.Parse(property.Name)
});
}
}
}
return result.ToArray();
}
