使用LINQ根据字段过滤JSON对象

时间:2019-11-29 06:21:53

标签: c# .net json linq

我有一组包含联系人详细信息的JSON对象,当它为true时,我必须根据字段对其进行过滤。

这是示例数据

{ 
    "9002":{
        "Contacts": [
            {
                "Source": 0,
                "Id": 0,
                "Details": {
                    "Harlson": "9015",
                    "adssd": "9022",
                    "First Name": "Gary",
                    "Last Name": "Harlson"
                },
                "Pinned": true
            }
        ]
    }
}

我想使用LINQ查询根据Pinned变为true时过滤所有详细信息。

2 个答案:

答案 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