我有看起来像这样的JSON数据:
{
"position":[
{
"top":[
42,
12
]
},
{
"middle":[
10,
15
]
},
{
"bottom":[
5,
201
]
},
{
"axis":[
{
"X":[
901,
51,
67
]
},
{
"Y":[
1474186,
561647
]
},
{
"Z":[
911,
1296501
]
},
15,
20
]
}
],
"validated":true,
"metadata":{
"uri":"/data/complex/",
"session":[
1818,
14
],
"private":false
},
"vists":0,
"ok":true,
"data":{
"10":{
"title":"Alpha",
"author":"Justin X. Ample",
"cover":"/f48hf58.tiff"
},
"901":{
"title":"Tau",
"author":"Felina Blank",
"cover":"/45trthrref.tiff"
}
},
"live":null
}
从这些数据中,我想显示这样的列表:
Alpha, Justin X. Ample
Tau, Felina Blank
请注意,密钥(在我的示例中,10和901)是不可预测的。因此,我想以某种方式创建一个代表"数据"结构并在其上迭代的对象,以获取每个条目的标题和作者。
使用基本的JSON结构,我在这样的事情上取得了成功(使用JSON.NET):
public class Foo
{
public int bar { get; set; }
public string baz { get; set; }
public string quxx { get; set; }
}
...
// json = {"bar": 1, "baz":"two", "quxx":"three"}
var result = await JsonConvert.DeserializeObjectAsync<Foo>(json);
return result.baz // "two"
,但我无法弄清楚我需要做些什么才能使其与复杂的结构一起使用。
var jObj = JsonConvert.DeserializeObject(json) as JObject;
var result = jObj["data"].Children()
.Cast<JProperty>()
.Select(x => new {
Title = (string)x.Value["title"] ,
Author = (string)x.Value["author"],
})
.ToList();
您可以按照以前的方式使用它。您只需要将您的实体课程修改为这样的东西:
public class MyVeryVeryUsefulObject
{
public Position[] position { get; set; }
public string baz { get; set; }
public string quxx { get; set; }
}
public class Position
{
public Int32[] top;
public Int32[] middle;
public Int32[] bottom;
}
等等。您只需要将JSON-Objects表示为代码中的实体类。
我已经找到了一个有用的链接,也许这将减少您的工作量,从实现这种JSON结构中。http://json2csharp.com/