2013-10-19 145 views
0

我將JSON數據映射到C#中我自己的類,然後嘗試在需要的位置顯示各種數據但是我遇到了一個小問題,當我無法獲取數據時相信我應該能夠。顯然,什麼是錯的,我希望有人能指出我在正確的方向:JSON的從Json訪問數據集

示例代碼片段:

"items" 
{  
    "0" 
    { 
     "name"  "Riki's Dagger" 
     "prefab"  "default_item" 
     "item_name"  "#DOTA_Item_Rikis_Dagger" 
     "item_type_name"  "#DOTA_WearableType_Daggers" 
     "model_player"  "models/heroes/rikimaru/rikimaru_weapon.mdl" 
     "used_by_heroes" 
     { 
      "npc_dota_hero_riki"  "1" 
     } 
    } 
    "1" 
    { 
     "name"  "Anti-Mage's Glaive" 
     "prefab"  "default_item" 
     "item_description"  "#DOTA_Item_Desc_AntiMages_Glaives" 
     "item_name"  "#DOTA_Item_AntiMages_Glaive" 
     "item_type_name"  "#DOTA_WearableType_Glaive" 
     "model_player"  "models/heroes/antimage/antimage_weapon.mdl" 
     "used_by_heroes" 
     { 
      "npc_dota_hero_antimage"  "1" 
     } 
} 

我使用下面如下序列化這對我自己的類:

DotaItemsGameResult itemGameResult 
    = JsonConvert.DeserializeObject<DotaItemsGameResult>(rawItemDetailsJson); 

這是行得通,因爲我在別處使用過這個。

麻煩來這裏:

string dataToDisplay = ""; 

foreach (DotaItemsGameItem item in itemGameResult.Items_Game.Items.Item_Index) 
{ 
    dataToDisplay += "<h3> Item: " + item.Name + "</h3>";     
    dataToDisplay += "<p> Quality: " + item.Item_Quality + "</p>"; 
    dataToDisplay += "<p> Attributes: " + item.Used_By_Heroes + "</p>"; 
} 

return dataToDisplay; 

我的代碼似乎知道即將itemGameResult.Items_Game.Items而不是當我想進一步進入.Items_Index

我有以下類別:

基本上,我的目標是能夠得到在我的循環的Used_By_Heroes數據,但我不能。

在我的每個,itemGameResult.Items_Game.Items是好的,但itemGameResult.Items_Game.Items.Item_Index不是,我不明白爲什麼。

我不能訪問Item_Index當我使用點符號,沒有Item_Index我希望那裏有。如果我把它放在不管怎樣,嘗試編譯,我看到:

錯誤1「System.Collections.Generic.List」不包含一個定義爲「Item_Index」,沒有擴展方法「Item_Index」接受可以找到'System.Collections.Generic.List'類型的第一個參數(你是否缺少using指令或程序集引用?)。

任何幫助將是太棒了。

回答

1

問題是DotaItemsGameResultProperties類的Items屬性是一個集合(List<DotaItemsGameItems>),所以它沒有屬性Item_Index。不知道你想達到什麼做的,但一個可能解決這個問題是要遍歷這個集合也:

string dataToDisplay = ""; 

foreach (DotaItemsGameItems items in itemGameResult.Items_Game.Items) 
{ 
    foreach (DotaItemsGameItem item in items.Item_Index) 
    { 
     dataToDisplay += "<h3> Item: " + item.Name + "</h3>";     
     dataToDisplay += "<p> Quality: " + item.Item_Quality + "</p>"; 
     dataToDisplay += "<p> Attributes: " + item.Used_By_Heroes + "</p>"; 
    } 
} 

return dataToDisplay; 

這是說明你的數據的結構,你可以在一個更簡潔的方式做到這一點:

string dataToDisplay = ""; 

var allItems = itemGameResult.Items_Game.Items.SelectMany(i => i.Item_Index); 
foreach (DotaItemsGameItem item in allItems) 
{ 
    dataToDisplay += "<h3> Item: " + item.Name + "</h3>";     
    dataToDisplay += "<p> Quality: " + item.Item_Quality + "</p>"; 
    dataToDisplay += "<p> Attributes: " + item.Used_By_Heroes + "</p>"; 
} 

return dataToDisplay; 
+0

啊..就是這樣。有點傻...謝謝你的幫助! – Goose