【问题标题】:Accessing Data sets from Json从 Json 访问数据集
【发布时间】:2013-10-19 18:21:09
【问题描述】:

我在 C# 中将 JSON 数据映射到我自己的类,然后尝试在我需要的地方显示各种数据,但是我遇到了一个小问题,当我认为我应该能够获取数据时,我似乎无法获取数据至。显然出了点问题,我希望有人能指出我正确的方向:

JSON 的 sn-p 示例:

"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 数据,但我不能。

在我的 for each 中,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 指令或程序集引用?)。

任何帮助都会很棒。

【问题讨论】:

    标签: c# asp.net json


    【解决方案1】:

    问题是 DotaItemsGameResultProperties 类的 Items 属性是一个集合 (List&lt;DotaItemsGameItems&gt;),因此它没有属性 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;
    

    【讨论】:

      猜你喜欢
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2017-08-18
      相关资源
      最近更新 更多