从 JSON 访问数据集
本文关键字:数据集 访问 JSON | 更新日期: 2023-09-27 18:36:05
我正在将 JSON 数据映射到 C# 中我自己的类,然后尝试在我需要的地方显示各种数据,但是我遇到了一个小问题,当我相信我应该能够时,我似乎无法获取数据。显然有些不对劲,我希望有人能指出我正确的方向:
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
时就不知道了。
我有以下课程:
public class DotaItemsGameResult
{
public DotaItemsGameResultProperties Items_Game { get; set; }
}
public class DotaItemsGameResultProperties
{
public List<DotaItemsGameRarities> Rarities { get; set; }
public List<DotaItemsGameItems> Items { get; set; }
}
public class DotaItemsGameItems
{
public List<DotaItemsGameItem> Item_Index { get; set; }
}
public class DotaItemsGameItem
{
public string Name { get; set; }
public string Hidden { get; set; }
public string Item_Class { get; set; }
public string Item_Name { get; set; }
public string Item_Slot { get; set; }
public string Item_Quality { get; set; }
public string Min_Ilevel { get; set; }
public string Max_Ilevel { get; set; }
public string Item_Description { get; set; }
public string Item_Type_Name { get; set; }
public List<DotaItemsGameUsedByHero> Used_By_Heroes { get; set; }
}
基本上,我的目标是能够获取循环中的Used_By_Heroes
数据,但我不能。
在我的每个中,itemGameResult.Items_Game.Items
很好,但itemGameResult.Items_Game.Items.Item_Index
不是,我看不出为什么。
当我使用点符号时,我无法访问Item_Index
,没有我期望Item_Index
。如果我无论如何都把它放进去并尝试编译,我会看到这个:
错误 1 "System.Collections.Generic.List"不包含"Item_Index"的定义,并且找不到接受类型为"System.Collections.Generic.List"的第一个参数的扩展方法"Item_Index"(是否缺少 using 指令或程序集引用?)。
任何帮助都会很棒。
问题是类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;