遍历 JObject 得到 属性 Name
Looping through JObject to get Property Name
正如标题中简要描述的那样,我试图循环遍历 JObject 以获取内部键的所有名称,但是如您所见,这是在 sub-key "Bayonet" 下指定的。虽然这很好用,我需要一个更通用的方法,因为 "Bayonet" 子项不会总是存在。以下是我的一些尝试:
可行但未推广的解决方案:
foreach (JProperty condition in SkinData[Skin]["Bayonet"])
{
conditionlines.Add(condition.Name);
}
无法将 JObject 转换为 JProperty 错误:
foreach (JProperty condition in SkinData[Skin].First)
{
conditionlines.Add(condition.Name);
}
因无名称字符串错误而失败:
foreach (JProperty condition in SkinData[Skin][0])
{
conditionlines.Add(condition.Name);
}
JSON:
{
"Scorched":{
"Bayonet":{
"FN":"51",
"MW":"32",
"FT":"25",
"WW":"26",
"BS":"26"
},
"Bowie Knife":{
"MW":"25",
"FT":"20",
"WW":"21",
"FN":"41",
"BS":"20"
},
"Butterfly Knife":{
"FN":"50",
"MW":"36",
"FT":"29",
"WW":"28",
"BS":"29"
},
"Falchion Knife":{
"FN":"31",
"MW":"20",
"FT":"17",
"WW":"17",
"BS":"17"
},
"Flip Knife":{
"FN":"0",
"MW":"24",
"FT":"20",
"WW":"20",
"BS":"20"
},
"Gut Knife":{
"FN":"0",
"MW":"19",
"FT":"17",
"WW":"18",
"BS":"17"
},
"Huntsman Knife":{
"FN":"48",
"MW":"27",
"FT":"21",
"WW":"21",
"BS":"20"
},
"Karambit":{
"FN":"87",
"MW":"55",
"FT":"43",
"WW":"42",
"BS":"41"
},
"M9 Bayonet":{
"FN":"54",
"MW":"38",
"FT":"30",
"WW":"30",
"BS":"30"
},
"Shadow Daggers":{
"FN":"29",
"MW":"20",
"FT":"17",
"WW":"17",
"BS":"17"
}
}
}
你可以这样做:
foreach (var condition in ((JContainer)SkinData[Skin]).Descendants().OfType<JObject>().Take(1).Properties())
{
conditionlines.Add(condition.Name);
}
这会找到第一个 descendant (if any) of the token specified by Skin
that is of type JObject
, then loops through its properties。
示例 fiddle.
正如标题中简要描述的那样,我试图循环遍历 JObject 以获取内部键的所有名称,但是如您所见,这是在 sub-key "Bayonet" 下指定的。虽然这很好用,我需要一个更通用的方法,因为 "Bayonet" 子项不会总是存在。以下是我的一些尝试:
可行但未推广的解决方案:
foreach (JProperty condition in SkinData[Skin]["Bayonet"])
{
conditionlines.Add(condition.Name);
}
无法将 JObject 转换为 JProperty 错误:
foreach (JProperty condition in SkinData[Skin].First)
{
conditionlines.Add(condition.Name);
}
因无名称字符串错误而失败:
foreach (JProperty condition in SkinData[Skin][0])
{
conditionlines.Add(condition.Name);
}
JSON:
{
"Scorched":{
"Bayonet":{
"FN":"51",
"MW":"32",
"FT":"25",
"WW":"26",
"BS":"26"
},
"Bowie Knife":{
"MW":"25",
"FT":"20",
"WW":"21",
"FN":"41",
"BS":"20"
},
"Butterfly Knife":{
"FN":"50",
"MW":"36",
"FT":"29",
"WW":"28",
"BS":"29"
},
"Falchion Knife":{
"FN":"31",
"MW":"20",
"FT":"17",
"WW":"17",
"BS":"17"
},
"Flip Knife":{
"FN":"0",
"MW":"24",
"FT":"20",
"WW":"20",
"BS":"20"
},
"Gut Knife":{
"FN":"0",
"MW":"19",
"FT":"17",
"WW":"18",
"BS":"17"
},
"Huntsman Knife":{
"FN":"48",
"MW":"27",
"FT":"21",
"WW":"21",
"BS":"20"
},
"Karambit":{
"FN":"87",
"MW":"55",
"FT":"43",
"WW":"42",
"BS":"41"
},
"M9 Bayonet":{
"FN":"54",
"MW":"38",
"FT":"30",
"WW":"30",
"BS":"30"
},
"Shadow Daggers":{
"FN":"29",
"MW":"20",
"FT":"17",
"WW":"17",
"BS":"17"
}
}
}
你可以这样做:
foreach (var condition in ((JContainer)SkinData[Skin]).Descendants().OfType<JObject>().Take(1).Properties())
{
conditionlines.Add(condition.Name);
}
这会找到第一个 descendant (if any) of the token specified by Skin
that is of type JObject
, then loops through its properties。
示例 fiddle.