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

LINQ to JSON - Select array object element where specific property matches

我的 LINQ-Fu 技能很差,在查看 JSON.NET 示例后,我仍然无法弄清楚如何 select 我想要的数据。我有一个 JSON 的 blob 如下 ...

{
    "@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 表达式,它允许我 select id 元素的值,其中 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. 错误。我想避免必须写一个 class 来表示 JSON 所以它可以被反序列化。

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

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