循环遍历多个JObject级别并以字符串forms收集信息

我正在使用以下代码从URL收集Json数据。

var json = new WebClient().DownloadString("http://steamcommunity.com/id/tryhardhusky/inventory/json/753/6"); JObject jo = JObject.Parse(json); JObject ja = (JObject)jo["rgDescriptions"]; int cCount = 0; int bCount = 0; int eCount = 0; foreach(var x in ja){ // I'm stuck here. string type = (Object)x["type"]; } CUAI.sendMessage("I found: " + ja.Count.ToString()); 

一切都运作良好,直到我得到foreach声明。
这是JSON数据的片段。

 { "success": true, "rgInventory": { "Blah other stuff" }, "rgDescriptions": { "637390365_0": { "appid": "753", "background_color": "", "type": "0RBITALIS Trading Card" "175240190_0": { "appid": "753", "background_color": "", "type": "Awesomenauts Trading Card" }, "195930139_0": { "appid": "753", "background_color": "", "type": "CONSORTIUM Emoticon" } } } 

我想循环遍历rgDescriptions中的每个项目并将type数据作为字符串获取,然后检查它是否包含backgroundemoticontrading card
我知道我可以使用if(type.Contains("background"))来检查项目类型是什么,但是我遇到了foreach循环的问题。

如果我使用foreach(JObject x in ja)我得到一个cannot convert type错误。
如果我使用foreach(Object x in ja)它提出了一个Cannot apply indexing of type object
当我使用foreach(var x in ja)string type = (JObject)x["type"];时,也会发生此错误string type = (JObject)x["type"];

谁能告诉我我做错了什么,拜托?

您的JSON中有一些错误。 用jsonlint.com查看。 我认为应该看起来像这样:

 { "success": true, "rgInventory": { "Blah other stuff": "" }, "rgDescriptions": { "637390365_0": { "appid": "753", "background_color": "", "type": "0RBITALIS Trading Card" }, "175240190_0": { "appid": "753", "background_color": "", "type": "Awesomenauts Trading Card" }, "195930139_0": { "appid": "753", "background_color": "", "type": "CONSORTIUM Emoticon" } } } 

您可以使用JProperty,JToken和SelectToken方法来获取类型:

 var json = new WebClient().DownloadString("http://steamcommunity.com/id/tryhardhusky/inventory/json/753/6"); JObject jo = JObject.Parse(json); foreach (JProperty x in jo.SelectToken("rgDescriptions")) { JToken type = x.Value.SelectToken("type"); string typeStr = type.ToString().ToLower(); if (typeStr.Contains("background")) { Console.WriteLine("Contains 'background'"); } if (typeStr.Contains("emoticon")) { Console.WriteLine("Contains 'emoticon'"); } if (typeStr.Contains("trading card")) { Console.WriteLine("Contains 'trading card'"); } }