2017-06-01 254 views
1

正如它在标题im中试图通过JObject循环获取所有内部键名称所描述的那样,但是您可以看到这是在子键“Bayonet”下指定的。虽然这工作正常,我需要一个更通用的方法,因为“Bayonet”子键不会总是存在。下面是一些我的尝试:通过JObject循环以获得属性名称

工作解决方案,但ungeneralized:

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" 
     } 
    } 
} 
+0

你可能想看看我是怎么做类似的[这里](https://stackoverflow.com/a/44267151/3932049) –

+0

@CamiloTerevinto那么奇怪的事情是为什么它与一个合格的键,但不与。首先,那就是我不懂的 – Nikolas

回答

1

你可以这样做:

foreach (var condition in ((JContainer)SkinData[Skin]).Descendants().OfType<JObject>().Take(1).Properties()) 
{ 
    conditionlines.Add(condition.Name); 
}  

此发现的第一个descendant(如有的话)SkinJObject类型指定令牌,然后遍历其properties

样本fiddle

+0

太棒了,谢谢! – Nikolas