C# 需要Linq帮助使用JSON.NET选择标记列表吗
我有一个JSON文件,其中包含按键排列的图标列表,每个图标都有一个标记列表。看起来是这样的:C# 需要Linq帮助使用JSON.NET选择标记列表吗,c#,json,linq,json.net,C#,Json,Linq,Json.net,我有一个JSON文件,其中包含按键排列的图标列表,每个图标都有一个标记列表。看起来是这样的: { "IconTags": [ { "Key": "Com_Active", "Tags": [ "Green", "Circle", "Active" ] }, { "Key": "Com_Add", "Tags": [ "Green",
{
"IconTags": [
{
"Key": "Com_Active",
"Tags": [
"Green",
"Circle",
"Active"
]
},
{
"Key": "Com_Add",
"Tags": [
"Green",
"Plus",
"Add"
]
}
]
}
在运行时,我希望使用JSON.NET解析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>();
JObject-iconTags=JObject.Parse(File.ReadAllText(@“iconTags.json”);
变量标记=来自i的图标标记[“图标标记”]
其中i[“Key”].Value()=“Com_添加”
选择i[“标记”].Values();
这是可行的,但它返回IEnumerable
我希望我的Linq查询只返回IEnumerable
你们中任何一位优秀的专家能帮我解答Linq问题吗
干杯 您可以改为使用SelectMany,这将展平所有可枚举项
iconTags["IconTags"].Where(i => i["Key"].Value<string>() == "Com_Add" )
.SelectMany(i => i["Tags"].Values<string>());
iconTags[“iconTags”]。其中(i=>i[“Key”].Value()==“Com\u Add”)
.SelectMany(i=>i[“Tags”].Values());
您可以在文章中获得更多信息您可以改用SelectMany,这将使所有可枚举项变平
iconTags["IconTags"].Where(i => i["Key"].Value<string>() == "Com_Add" )
.SelectMany(i => i["Tags"].Values<string>());
iconTags[“iconTags”]。其中(i=>i[“Key”].Value()==“Com\u Add”)
.SelectMany(i=>i[“Tags”].Values());
您可以在文章中获得更多信息您需要这样的内容:
var tags = (from i in iconTags["IconTags"]
where i["Key"].Value<string>() == "Com_Add"
select i["Tags"].Values<string>()).First();
var tags=(从i到iconTags[“iconTags”]
其中i[“Key”].Value()=“Com_添加”
选择i[“标记”].Values()).First();
它将返回您得到的可枚举的第一个元素您需要这样的内容:
var tags = (from i in iconTags["IconTags"]
where i["Key"].Value<string>() == "Com_Add"
select i["Tags"].Values<string>()).First();
var tags=(从i到iconTags[“iconTags”]
其中i[“Key”].Value()=“Com_添加”
选择i[“标记”].Values()).First();
它将返回您得到的可枚举的第一个元素SelectMany函数缺少Anders箭头。应该是:
.SelectMany(i=>i[“Tags”].Values())代码>@Keith谢谢,我错过了我写得很快的机会,我做了那些更改我真的很喜欢使用这种语法。有什么方法可以让我接受两个答案是正确的吗?@Keith,你在上面选择的答案只会得到第一个可枚举的结果,而不是将它们展平,你可能会错过结果。e、 如果你有一个可枚举的可枚举项,它只会抓取第一个可枚举项并忽略rest@Keith我也喜欢这种语法,一开始有点混乱,但它看起来更像是代码而不是sql,而且大多数时候很容易阅读SelectMany函数缺少Anders箭头。应该是:.SelectMany(i=>i[“Tags”].Values())代码>@Keith谢谢,我错过了我写得很快的机会,我做了那些更改我真的很喜欢使用这种语法。有什么方法可以让我接受两个答案是正确的吗?@Keith,你在上面选择的答案只会得到第一个可枚举的结果,而不是将它们展平,你可能会错过结果。e、 如果你有一个可枚举的可枚举项,它只会抓取第一个可枚举项并忽略rest@Keith我也喜欢这种语法,一开始它有点混乱,但它看起来更像是代码而不是sql,而且大多数时候它很容易阅读