需要Linq帮助使用JSON.NET选择标签列表

时间:2016-12-07 15:29:27

标签: c# json linq json.net

我有一个JSON文件,其中包含按键列表,每个图标都有一个标签列表。它看起来像这样:

{
  "IconTags": [
    {
      "Key": "Com_Active",
      "Tags": [
        "Green",
        "Circle",
        "Active"
      ]
    },
    {
      "Key": "Com_Add",
      "Tags": [
        "Green",
        "Plus",
        "Add"
      ]
    }
  ] 
}

在运行时,使用JSON.NET,我想解析特定图标Key的JSON并返回标签列表。

以下是我目前的情况:

JObject iconTags = JObject.Parse(File.ReadAllText(@"IconTags.json"));

var tags = from i in iconTags["IconTags"] 
    where i["Key"].Value<string>() == "Com_Add" 
    select i["Tags"].Values<string>();

这样可行,但会返回IEnumerable<IEnumerable<String>>

我希望我的Linq查询只返回IEnumerable<String>

你们中的任何一位出色的专家都可以帮我解决我的Linq查询吗?

干杯!

2 个答案:

答案 0 :(得分:0)

您可以使用SelectMany,这将使所有枚举变得扁平化。

iconTags["IconTags"].Where(i => i["Key"].Value<string>() == "Com_Add" )
 .SelectMany(i => i["Tags"].Values<string>());

您可以在MSDN文章

获取更多信息

答案 1 :(得分:0)

你需要有这样的东西:

var tags = (from i in iconTags["IconTags"] 
where i["Key"].Value<string>() == "Com_Add" 
select i["Tags"].Values<string>()).First();

它将返回您可以获取的可枚举的第一个元素