我不想写循环..我想看到所有可用的选项(使用LINQ,SelectTokens,JSON.NET或任何其他一些工具)让我返回一个/一个数组对象相对于内部的东西例如:
{
"theFamilies": [{
"parent1": "Joe",
"parent2": "Mary",
"child1": "Andy"
}, {
"parent1": "Bob",
"parent2": "Mary",
"child1": "Mark"
}]
}
返回包含"parent2" = "Mary"
的整个对象的列表。
如果......嵌套更深?是否有一种避免/忽略嵌套深度的好方法,并递归地获得满足不需要任何编码更改的条件的所有条件?
任何有关每种解决方案的好处或损害的评论都将受到特别赞赏。
答案 0 :(得分:1)
我猜您正在寻找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 强> 对于所有令牌,您应该使用SelectTokens
var res = o.SelectTokens("theFamilies[*].parent2");
答案 1 :(得分:-2)
您的数据似乎是Family
个对象的数组。您可以为此创建一个poco,并使用LINQ
选择在将json反序列化为C#类型后匹配的那些。可以使用以下内容 -
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; }
}