2013-10-19 32 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