代码之家  ›  专栏  ›  技术社区  ›  webworm

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

  •  2
  • webworm  · 技术社区  · 6 年前

    我的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 元素的位置 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 回复  |  直到 6 年前
        1
  •  1
  •   NetMage    6 年前

    因为你只需要一个答案而不是 IEnumerable ,您需要使用 First :

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