3

私はjson.netを使用していて、そのようなjsonデータを持っています。

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

linqを介してIssuesからchilderenデータを取得したいだけです。親には連絡できますが、子供には連絡できません。子データに直接到達する場合、複数のforループを配置する必要はありません。

ありがとうございました。

4

2 に答える 2

3

Jsonオブジェクトを作成し、プロパティを匿名タイプに抽出して、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を使用して、Issuesの子を取得します。これで、必要なものについて問題を照会できます。

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 に答える