1

私は MVC 3 Web アプリを持っており、クライアント jquery に返される結果を制限するために Linq を使用したい JSON オブジェクトを返しています。

Json 応答は次の構造を取ります。

{
  "Data": {
"Items": [
  {
    "Result": {
      "Id": "e2ba4912-c387-4f54-b55e-06742a6858db",
      "Name": "SomeOtherSetting",
      "Value": "500",
      "Archived": false
     },
    "Result": {
      "Id": "17c27584-cea8-42c2-b6c4-0b30625ac3ce",
      "Name": "Setting2",
      "Value": "600",
      "Archived": false
    },
    "Result": {
      "Id": "17c27584-cea8-42c2-b6c4-0b30625ac3ce",
      "Name": "Setting3",
      "Value": "700",
      "Archived": false
    }
   }]
}
}

....

たとえば、「設定」のような名前を持つ json アイテムだけを返すか、取得する必要があります。この例では、2 つの Json ノードのみが返されます。

私のLinqは非常に限られており、私が持っているものは次のとおりです。設定は、Json応答が保存される場所です。

NewtonSoft.Json.Linq.JObject data = NewtonSoft.Json.Linq.JObject.Parse(Settings);

var result = from p in data["Data"]["Items"].Children()
    where (p["Result"]["Name"].Contains("Expenses.Help.Tip"))
     select new { Name = (string)p["Result"]["Name"], Value = (string)p["Result"]["Value"] };

これを実行すると、結果に何も得られません。誰かが私が間違っていることを教えてくれますか?

ありがとう。

4

1 に答える 1

2

私は Json の専門家ではありませんが、あなたの Json 構造にはいくつか問題があると思います。

私はオンライン パーサーを試しましたが、解析では 3 番目の結果しか得られませんでした... (左側のウィンドウでコードをコピーして、JS eval.

それ以外の

"Items": [
  {
    "Result": {

     },
    "Result": {

    },
    "Result": {

    }
   }]

Items 配列の各要素 ( each 'Result') を に含める必要があります{}

"Items": [
  {
    {"Result": {

      }
    },
    {"Result": {

      }
    },
    {"Result": {

      }
   }]

Jsonファイルを次のように変更することで動作するようになりました

 {
  "Data": {
"Items": [
   {
    "Result": {
      "Id": "e2ba4912-c387-4f54-b55e-06742a6858db",
      "Name": "SomeOtherSetting",
      "Value": "500",
      "Archived": false
      }
    },
    {
     "Result": {
      "Id": "17c27584-cea8-42c2-b6c4-0b30625ac3ce",
      "Name": "Setting2",
      "Value": "600",
      "Archived": false
      }
    },
    {
     "Result": {
      "Id": "17c27584-cea8-42c2-b6c4-0b30625ac3ce",
      "Name": "Setting3",
      "Value": "700",
      "Archived": false
    }
   }]
  }
}

使用して

var data = JObject.Parse(test)["Data"]["Items"].Children()
        .Where(m => m["Result"]["Name"].Value<string>().Contains("Setting"))
        .Select(m => new
                         {
                             Name = m["Result"]["Name"].Value<string>(),
                             Value = m["Result"]["Value"].Value<int>()
                         })
        .ToList();
于 2012-10-10T14:20:52.290 に答える