55

这是我从 .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# 类并反序列化它。

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

4

4 回答 4

84

不需要 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

于 2013-09-12T07:47:08.870 回答
4

I would not recommend LINQ. I would recommend a JSON library such as newtonsoft.json.

So you can do this:

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

Note:- this code has been copied from the samples present on the project site http://james.newtonking.com/pages/json-net.aspx

于 2013-09-12T07:45:34.690 回答
0

在绑定中,您始终可以反序列化 JSON 并将其序列化为 XML,然后将 XML 加载到 XDocument 中。然后您可以使用经典的 Linq to XML。完成后获取 XML,对其进行反序列化,然后将其序列化回 JSON 到 JSON。我们使用这种技术将 JSON 支持添加到最初为 XML 构建的应用程序中,它允许几乎为零的修改来启动和运行。

于 2016-06-03T15:30:49.680 回答
0

您可以像这样使用 LINQ 轻松查询

考虑到这个 JSON

{
    "items": [
        {
            "id": "10",
            "name": "one"
        },
        {
            "id": "12",
            "name": "two"
        }
    ]
}

让我们把它放在一个json像这样命名的变量中,

JObject json = JObject.Parse("{'items':[{'id':'10','name':'one'},{'id':'12','name':'two'}]}");

您可以从名称"one"使用以下 LINQ 查询的项目中选择所有 id

var Ids =
    from item in json["items"]
    where (string)item["name"] == "one"
    select item["id"];

然后,您将在 IEnumerable 列表中获得结果

于 2021-08-06T20:14:37.757 回答