我不想写循环。我想看到所有可用的选项(使用 LINQ、SelectTokens、JSON.NET 或任何其他工具),这些选项让我返回相对于内部内容的数组对象。例如:
{
"theFamilies": [{
"parent1": "Joe",
"parent2": "Mary",
"child1": "Andy"
}, {
"parent1": "Bob",
"parent2": "Mary",
"child1": "Mark"
}]
}
返回包含 "parent2" = "Mary"
的整个对象的列表。
如果..筑巢更深呢? 有没有一种很好的方法可以避免/忽略嵌套深度并递归地获取所有满足不需要任何编码更改的条件?
关于每种解决方案的利弊的任何评论将不胜感激。
我猜你正在寻找 Json.NET SelectToken
在您的情况下:
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对于所有令牌,您应该使用选择令牌
var res = o.SelectTokens("theFamilies[*].parent2");
似乎是Family
对象的数组。可以为此创建一个 poco,并在将 json 反序列化为 C# 类型后使用 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; }
}