在JSON.net中,如何遍历JObject键的子级的JProperties?
代码:
JObject json = JObject.Parse(jsonstring);
var developments = json["Developments"][0];
//Doesn't work
//Error CS1929 'JToken' does not contain a definition for 'Properties' and the best extension method overload 'Extensions.Properties(IEnumerable<JObject>)' requires a receiver of type 'IEnumerable<JObject>'
//foreach(JProperty property in development.Properties())
// Console.WriteLine(property.Name + property.Value);
JSON:
{
"Developments": {
"Plot 125": {
"developer": "XYZ",
"selection":{
"Subdivision 1" : "135000",
"Subdivision 2": "450000"
}
},
"Plot 126":{
"developer": "XYZ",
"selection":{
"Subdivision 1": "56000",
"Subdivision 2": "98000",
"Subdivision 3": "456000"
}
}
}
}
与JSON.net 4.0版本6.0.0编译
答案 0 :(得分:5)
所有JToken
对象都包含允许您对任何对象进行操作的属性,就好像它是任何有效的json类型一样。
尤其是在json.net中,对象的子代为JProperty
。因此,只需获取对象的子代即可。
var query =
from x in json["Developments"].Children<JProperty>()
select x.Name;
另一方面,如果已经将其键入为JObject
,则可以直接访问属性。
var query =
from x in ((JObject)json["Developments"]).Properties()
select x.Name;