我正在开发一个游戏控制台应用程序,该应用程序反序列化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的任何派生类。
我的问题是:我如何反序列化这些派生类?