3

我正在使用 json.net 并且我有一个这样的 json 数据,

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

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

谢谢你。

4

2 回答 2

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");

这是“使用 LINQ 示例反序列化”的 json.net 页面的直接链接。

于 2012-07-23T16:36:00.203 回答
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");
}
于 2012-07-23T16:12:05.580 回答