我能LINQ一个JSON吗?

mar*_*zzz 53 .net c# linq json linq-to-json

这是我从.NET上的请求得到的JSON:

{
  "id": "110355660738", 
  "picture": {
    "data": {
      "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/1027085_12033235063_5234302342947_n.jpg", 
      "is_silhouette": false
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想用(或许?)LINQ捕捉字段"url".我做了很多请求,这有点不同.所以我不会创建一个C#类并且每次都反序列化它.

它是一种提取单个字段的方法吗?谢谢!

I4V*_*I4V 82

不需要Linq,只需使用dynamic(使用Json.Net)

dynamic obj = JObject.Parse(json);
Console.WriteLine((string)obj.picture.data.url);
Run Code Online (Sandbox Code Playgroud)

Linq版本的可读性不高

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

文档:LINQ to JSON

  • 只是旁注:`.Where(p => p.Name =="url").First()`可以替换为`.First(p => p.Name =="url")`. (11认同)

Par*_*rma 5

我不推荐LINQ.我会推荐一个JSON库,如newtonsoft.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
Run Code Online (Sandbox Code Playgroud)

注意: - 此代码已从项目站点上的示例中复制 http://james.newtonking.com/pages/json-net.aspx

  • @MichaëlHompus为什么有人需要LINQ? (12认同)
  • 好吧,看看问题的标题?:) (12认同)
  • 您的示例中的LINQ在哪里? (3认同)