我从一个返回.json格式的网站获取数据,这种格式对我来说非常陌生。我一直在寻找解决方案几个小时,我必须使用术语。
json的格式如下:
[
{
"Foo": {
"name": "Foo",
"size": {
"human": "832.73kB",
"bytes": 852718
},
"date": {
"human": "September 18, 2017",
"epoch": 1505776741
},
}
},
{
"bar": {
"name": "bar",
"size": {
"human": "4.02MB",
"bytes": 4212456
},
"date": {
"human": "September 18, 2017",
"epoch": 1505776741
}
}
}]
我正在使用Newtonsoft的JSON.NET,我似乎无法创建一个允许我反序列化它的数据结构,因为它是具有不同名称的类数组。具体而言,属性名称"Foo"
和"bar"
在运行时可能会有所不同。 JSON层次结构中其他位置的属性名称是已知的。
答案 0 :(得分:5)
假设在编译时只有名称"Foo"
和"Bar"
是未知的,您可以将该JSON反序列化为List<Dictionary<string, RootObject>>
,其中RootObject
是ac#model I generated自动使用JSON中的http://json2csharp.com/获取"Foo"
的值。
型号:
public class Size
{
public string human { get; set; }
public int bytes { get; set; }
}
public class Date
{
public string human { get; set; }
public int epoch { get; set; }
}
public class RootObject
{
public string name { get; set; }
public Size size { get; set; }
public Date date { get; set; }
}
反序列化代码:
var list = JsonConvert.DeserializeObject<List<Dictionary<string, RootObject>>>(jsonString);
注意:
最外面的类型必须是可枚举的List<T>
,因为最外层的JSON容器是一个数组 - 由[
和]
包围的以逗号分隔的值序列。请参阅Serialization Guide: IEnumerable, Lists, and Arrays。
当JSON对象可以具有任意属性名称但具有固定的属性值模式时,可以将Dictionary<string, T>
反序列化为适当的T
。请参阅Deserialize a Dictionary。
bytes
和epoch
可能属于long
类型。
工作.Net fiddle。