c# - 无法弄清楚如何将此 JSON 反序列化为 C#
问题描述
我已经尝试了几个反序列化器,但无法弄清楚如何获取条目数组而不是每个条目的类。下面是 json2csharp 的输入和输出。
[
{
"subdeviceGuid": "000781000030534e",
"componentId": "all",
"entries": {
"1619701200000": {
"min": 0.437,
"max": 2.014,
"mean": 0.751
},
"1619704800000": {
"min": 0.526,
"max": 2.089,
"mean": 0.893
},
"1619708400000": {
"min": -1.456,
"max": -0.989,
"mean": -1.328
}
}
}
]
以及由https://json2csharp.com/创建的 c# 类
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
public class _1619701200000
{
public double min { get; set; }
public double max { get; set; }
public double mean { get; set; }
}
public class _1619704800000
{
public double min { get; set; }
public double max { get; set; }
public double mean { get; set; }
}
public class _1619708400000
{
public double min { get; set; }
public double max { get; set; }
public double mean { get; set; }
}
public class Entries
{
public _1619701200000 _1619701200000 { get; set; }
public _1619704800000 _1619704800000 { get; set; }
public _1619708400000 _1619708400000 { get; set; }
}
public class Root
{
public string subdeviceGuid { get; set; }
public string componentId { get; set; }
public Entries entries { get; set; }
}
解决方案
自动生成的类通常在最好用字典表示的 JSON 结构方面存在问题。试试这些课程
public class Entry
{
public double min { get; set; }
public double max { get; set; }
public double mean { get; set; }
}
public class Root
{
public string subdeviceGuid { get; set; }
public string componentId { get; set; }
public Dictionary<string, Entry> entries { get; set; }
}
此外,您的 JSON 以 '[' 开头,表示它不是单个对象,而是一个数组。所以当你反序列化它时,你应该反序列化成一个数组Root
而不是单个实例,就像这样
Root[] myDeserializedClass = JsonConvert.DeserializeObject<Root[]>(myJsonResponse);