C# 基于属性值从JObject返回子对象

C# 基于属性值从JObject返回子对象,c#,json,linq,json.net,C#,Json,Linq,Json.net,我有一些JSON,如下所示。我想从中获取所有对象,其中“type”是“Item” 预期产出: 'id': 'DynamicName-223', 'type': 'Item' 如何执行此操作?您可以反序列化为包含字典的匿名类型: var template = new {name = "", content = new Dictionary<string, JObject>()}; var result = JsonConvert.DeserializeAnonymousType(js

我有一些JSON,如下所示。我想从中获取所有对象,其中“type”是“Item”

预期产出:

'id': 'DynamicName-223',
'type': 'Item'

如何执行此操作?

您可以反序列化为包含字典的匿名类型:

var template = new {name = "", content = new Dictionary<string, JObject>()};
var result = JsonConvert.DeserializeAnonymousType(json, template);
输出将是:

body:id=body,type=body
样式: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


您可以使用如下查询获取“type”属性值为“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();
JObject obj=JObject.Parse(json);
列表项=obj[“内容”]
.儿童()
.Where(p=>(字符串)p.Value[“type”]=“Item”)
.选择(p=>(JObject)p.Value)
.ToList();

小提琴手:

谢谢你的评论。我知道有快速过滤的方法,但是我希望扩展我的过滤方法来实现这一点:)。我将其反序列化如下:JObject obj=JObject.Parse(json);您好,谢谢您,我看到了您在其他线程上的一些帖子,您对JSON.net有很好的了解!我可以再问你一个问题吗。我在列对象上有一个名为parentId的属性,它保存行对象id。正如您所知,一行可以有多个列。“如何既返回一行,又返回所有链接到该行id的列,这样我就可以保持父/子关系?”Mask dCodex--Aleks Andreev刚刚回答了这个问题。Brian,你能就此提供建议吗?
foreach (var item in result.content)
    Console.WriteLine($"{item.Key}: id = {item.Value["id"]}, type = {item.Value["type"]}");
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();