C# 如何查询json子对象并返回整个父对象?

C# 如何查询json子对象并返回整个父对象?,c#,json,json.net,C#,Json,Json.net,我不想写循环。。我想查看所有可用选项(使用LINQ、SelectTokens、JSON.NET或任何其他工具),这些选项允许我返回与内部内容相关的数组对象。例如: { "theFamilies": [{ "parent1": "Joe", "parent2": "Mary", "child1": "Andy" }, { "parent1": "Bob", "parent2": "Mary",

我不想写循环。。我想查看所有可用选项(使用LINQ、SelectTokens、JSON.NET或任何其他工具),这些选项允许我返回与内部内容相关的数组对象。例如:

{
    "theFamilies": [{
        "parent1": "Joe",
        "parent2": "Mary",
        "child1": "Andy"
    }, {
        "parent1": "Bob",
        "parent2": "Mary",
        "child1": "Mark"
    }]
}
返回包含
“parent2”=“Mary”
的整个对象的列表

如果。。筑巢更深?有没有一种很好的方法可以避免/忽略嵌套深度,并递归地获取满足不需要任何编码更改的条件的所有内容


如果您对每种解决方案的利弊有任何评论,我们将不胜感激。

您的数据似乎是一系列的
系列
对象。您可以为此创建一个poco,并在将json反序列化为C#type之后使用
LINQ
选择那些匹配的。可以使用下面这样的方法-

        var t = JsonConvert.DeserializeObject<Families>("json");

        var match = t.theFamilies.Where(a => a.parent2 == "Mary").ToList();

        public class Families
        {
            public List<Family> theFamilies { get; set; }

        }

        public class Family
        {
            public string parent1 { get; set; }
            public string parent2 { get; set; }
            public string child1 { get; set; }
        }
var t=JsonConvert.DeserializeObject(“json”);
var match=t.theFamilies.Where(a=>a.parent2==“Mary”).ToList();
公营家庭
{
公开列出族{get;set;}
}
公营家庭
{
公共字符串parent1{get;set;}
公共字符串parent2{get;set;}
公共字符串child1{get;set;}
}

我想你在找

就你而言:

var o = JObject.Parse("{'theFamilies': [{'parent1': 'Joe','parent2': 'Mary','child1': 'Andy'}, {'parent1': 'Bob','parent2': 'Mary','child1': 'Mark'}]}");
var res = o.SelectToken("theFamilies[0].parent2");
UPD 对于您应该使用的所有代币


“如果..嵌套更深怎么办?有没有一种好方法可以避免/忽略嵌套深度,并递归地获取所有满足条件的内容,而不需要任何编码更改?”“如果..嵌套更深怎么办”-以哪种方式?我不知道,我不是OP。但是你的答案并不能回答这个问题。如果我不想创建任何类,而只是简单地操作JSON呢?我不认为这实际上会返回一个对象列表,其中“parent2”=“Mary”。@nas是的,只有一个标记
var res = o.SelectTokens("theFamilies[*].parent2");