LINQ to JSON-选择匹配特定属性的数组对象元素

时间:2018-07-13 19:31:26

标签: linq linq-to-json

我的LINQ-Fu技能非常糟糕,在查看JSON.NET示例之后,我仍然很难弄清楚如何选择我想要的数据。我有一堆JSON,如下所示...

{
    "@odata.context": "http://wabi-us-north-central-b-redirect.analysis.windows.net/v1.0/myorg/$metadata#groups",
    "@odata.count": 2,
    "value": [
        {
            "id": "z48856e6-f385-4c89-a4b8-33c24hsr5c",
            "isReadOnly": false,
            "isOnDedicatedCapacity": false,
            "name": "Blood Values"
        },
        {
            "id": "k95d7cfe-c2a5-41f9-804w-e1b7ab31g31k",
            "isReadOnly": false,
            "isOnDedicatedCapacity": false,
            "name": "Tissue Preps"
        }
    ]
}

我正在尝试编写LINQ to JSON表达式,该表达式将允许我选择id值等于“ Tissue Preps”的name元素的值。

var parsedJson = JObject.Parse(webResponse.Response);
var datasetId = parsedJson["value"].Select(i => i.SelectToken("id")).Where(n => n.SelectToken("name").ToString() == "Tissue Preps");

上面是我尝试过的LINQ表达式,但最终遇到了Object reference not set to an instance of an object.错误。我想避免不得不编写一个类来表示JSON,以便可以反序列化它。

1 个答案:

答案 0 :(得分:1)

由于您希望得到一个答案而不是一个IEnumerable,因此需要使用First

var parsedJson = JObject.Parse(webResponse.Response);
var datasetId = parsedJson["value"].First(n => n.SelectToken("name").ToString() == "Tissue Preps")
                                   .SelectToken("id")
                                   .ToString();