我有一组包含联系人详细信息的JSON对象,当它为true时,我必须根据字段对其进行过滤。
这是示例数据
{
"9002":{
"Contacts": [
{
"Source": 0,
"Id": 0,
"Details": {
"Harlson": "9015",
"adssd": "9022",
"First Name": "Gary",
"Last Name": "Harlson"
},
"Pinned": true
}
]
}
}
我想使用LINQ查询根据Pinned
变为true
时过滤所有详细信息。
答案 0 :(得分:3)
您可以反序列化Json(使用NewtonSoft Json),并使用Linq通过Pinned=True
查询项目
var rootInstance = JsonConvert.DeserializeObject<RootObject>(json);
var result = rootInstance.Id.Contacts.Where(x=>x.Pinned);
其中的类定义为
public class Details
{
[JsonProperty("Harlson")]
public string Harlson { get; set; }
[JsonProperty("adssd")]
public string adssd { get; set; }
[JsonProperty("First Name")]
public string FirstName { get; set; }
[JsonProperty("Last Name")]
public string LastName { get; set; }
}
public class Contact
{
public int Source { get; set; }
public int Id { get; set; }
public Details Details { get; set; }
public bool Pinned { get; set; }
}
public class Id
{
public List<Contact> Contacts { get; set; }
}
public class RootObject
{
[JsonProperty("9002")]
public Id Id { get; set; }
}
答案 1 :(得分:2)
您可以通过将JSON与LINQ结合使用来解决它:
var myObjects = JArray.Parse(json)
.OfType<JObject>()
.Where(j => j.Properties().First().Value["Contacts"].Any(t => (bool)t["Pinned"] == true))
.ToList();
这完全取决于您应如何处理数据。我个人会使用Anu Viswan的答案,但是如果您只需要一小部分数据,这可能是一个可行的解决方案。
https://www.newtonsoft.com/json/help/html/QueryingLINQtoJSON.htm