c#在JSON文件中反序列化派生类

时间:2019-05-22 07:36:51

标签: c# json inheritance json.net deserialization

我正在开发一个游戏控制台应用程序,该应用程序反序列化JSON文件,以表示玩家必须处理的差异。

我遇到一种特殊的遭遇,名为“ LootEvent”,其中包含玩家可以获取的物品。这是代码:

这是带有属性的LootEvent类

    public class LootEvent
    {
        public string Name;
        public string Fluff;
        public Item Item;
        public List<LootAction> Actions;
    }

现在这是我想转换为LootEvent对象的JSON文件的示例:

   {
    "Name" : "A first Loot",
    "Fluff" : "Will you take this item?",
    "Weapon" : {"Name": "Iron Dagger", "Bonus": 1 },
    "Actions" : [{"Text": "Yes", "HasLoot" : true},
        {"Text": "No", "HasLoot" : false}]
   }

如您所见,没有“ Item”字段,这是因为“ Weapon”字段是Item的派生类:

这是Item类:

    public class Item
    {
        public string Name;
        public int Bonus;
    }

这是武器课:

public class Weapon : Item
{
}

我还有其他从Item派生的类,它们与“武器”类的样式相同,例如“装甲”或“药水”类。

现在我使用这种方法来转换我的json文件:

//the "json" variable is a string that contains all of the JSON file text
JsonConvert.DeserializeObject<LootEvent>(json);

因此,当我将JSON文件转换为LootEvent时,除Item属性外,所有字段都传递到LootEvent对象中,因为JSON中没有Item字段,而是Weapon或Armor或Item的任何派生类。

我的问题是:我如何反序列化这些派生类?

0 个答案:

没有答案