我有一些JSON,如下所示。 我想从中获取所有对象,其中"类型"是"项目"。
string json = @"
{
'name': 'Object 1',
'content': {
'body': {
'id': 'body',
'type': 'Body'
},
'style': {
'id': 'style',
'type': 'Style'
},
'DynamicName-123': {
'id': 'DynamicName-123',
'type': 'Row'
},
'DynamicName-434': {
'id': 'DynamicName-434',
'type': 'Column'
},
'DynamicName-223': {
'id': 'DynamicName-223',
'type': 'Item'
}
}
}";
JObject obj = JObject.Parse(json);
预期产出:
'id': 'DynamicName-223',
'type': 'Item'
我该怎么做?
可以使用如下所示
的 LINQ 到 JSON 查询获取具有"Item"属性值为"Item"的对象:
JObject obj = JObject.Parse(json);
List<JObject> items = obj["content"]
.Children<JProperty>()
.Where(p => (string)p.Value["type"] == "Item")
.Select(p => (JObject)p.Value)
.ToList();
小提琴:https://dotnetfiddle.net/dy1nQC
您可以使用字典将其反序列化为匿名类型:
var template = new {name = "", content = new Dictionary<string, JObject>()};
var result = JsonConvert.DeserializeAnonymousType(json, template);
现在,您可以从嵌套项中获取所有信息:
foreach (var item in result.content)
Console.WriteLine($"{item.Key}: id = {item.Value["id"]}, type = {item.Value["type"]}");
输出将是:
正文:id = 正文,类型 = 正文
样式:id = 样式,类型 = 样式
动态名称-123:id = 动态名称-123,类型 = 行
动态名称-434:id = 动态名称-434,类型 = 列
动态名称-223:id = 动态名称-223,类型 = 项