web-dev-qa-db-ja.com

JSONをLINQできますか?

これは、.NETのリクエストから取得したJSONです。

{
  "id": "110355660738", 
  "picture": {
    "data": {
      "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/1027085_12033235063_5234302342947_n.jpg", 
      "is_silhouette": false
    }
  }
}

そして、(おそらく?)LINQを使用して、フィールド「url」をキャッチしたいと思います。私はこのように多くの要求をします、それは少し異なります。そのため、C#クラスを作成して毎回デシリアライズすることはしません。

単一のフィールドを抽出する方法ですか?ありがとうございました!

53
markzzz

Linqは不要、dynamicを使用するだけです( Json.Net を使用)

dynamic obj = JObject.Parse(json);
Console.WriteLine((string)obj.picture.data.url);

Linqバージョンはそれほど読みにくい

JObject jObj = JObject.Parse(json);
var url = (string)jObj.Descendants()
                    .OfType<JProperty>()
                    .Where(p => p.Name == "url")
                    .First()
                    .Value;

ドキュメント:LINQ to JSON

82
I4V

LINQはお勧めしません。 newtonsoft.jsonなどのJSONライブラリをお勧めします。

だからあなたはこれを行うことができます:

string json = @"{
  ""Name"": ""Apple"",
  ""Expiry"": "2008-12-28T00:00:00",
  ""Price"": 3.99,
  ""Sizes"": [
    ""Small"",
    ""Medium"",
    ""Large""
  ]
}";

JObject o = JObject.Parse(json);

string name = (string)o["Name"];

// Apple
JArray sizes = (JArray)o["Sizes"];
string smallest = (string)sizes[0];

// Small

注:-このコードは、プロジェクトサイトにあるサンプルからコピーされました http://james.newtonking.com/pages/json-net.aspx

4
Parv Sharma

バインドでは、常にJSONを逆シリアル化してXMLにシリアル化し、XMLをXDocumentに読み込むことができます。その後、古典的なLinq to XMLを使用できます。完了したら、XMLを取得し、デシリアライズし、JSON to JSONにシリアル化します。この手法を使用して、元々XML用に構築されたアプリケーションにJSONサポートを追加しました。これにより、ほぼゼロの変更で起動して実行できました。

0