如何通过linq从json获取子数据

时间:2012-07-23 15:55:43

标签: c# json linq

我正在使用json.net,我有类似的json数据,

[
{
  "ID":1098,
  "Name":"JC",
  "Issues":[
     {
        "PriorityLevel":"Low",
        "State":"Open"
     },
     {
        "PriorityLevel":"Low",
        "State":"Open"
     }
  ]
}
]    

我只想通过linq从问题中获取孩子们的数据。我可以达到父母,但不能孩子。如果我直接联系到儿童数据,我不需要为循环提供多个。

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以创建一个Json对象并将属性提取为Anonymouse类型,然后可以使用Linq进行查询。

string response = @"[{
  ""ID"":1098,
  ""Name"":""JC"",
  ""Issues"":[
     {
        ""PriorityLevel"":""Low"",
        ""State"":""Open""
     },
     {
        ""PriorityLevel"":""Low"",
        ""State"":""Open""
     }
  ]}]";

var jsonObject = JObject.Parse(response);
var issues = jsonObject["Issues"].Select(x => new
             {
                 PriorityLevel = (string)x.SelectToken("PriorityLevel"),
                 State = (string)x.SelectToken("State")
             });

您使用SelectToken来抓住问题的子项。现在,您可以根据需要查询问题。

var lowPriorities = issues.Where(x => x.PriorityLevel == "Low");

以下是“Deserializing Using LINQ Example”上json.net页面的直接链接。

答案 1 :(得分:1)

你去吧

{
    var json = @"[      {
    ""ID"":1098,
    ""Name"":""JC"",
    ""Issues"":[
        {
            ""PriorityLevel"":""Low"",
            ""State"":""Open""
        },
        {
            ""PriorityLevel"":""Low"",
            ""State"":""Open""
        }
    ]}]";

    var a = JArray.Parse(json);

    var issues = a.SelectMany (x => x["Issues"]);
    var lowPriorities = issues.Where(x => ((string) x["PriorityLevel"]) == "Low");
}