Я работаю над приложением игровой консоли, которое десериализует JSON-файлы, представляющие различия, с которыми сталкивается игрок.
У меня есть особый тип столкновения под названием «LootEvent», который содержит Предмет, который может получить игрок. Вот код:
Вот класс LootEvent с его атрибутами
public class LootEvent
{
public string Name;
public string Fluff;
public Item Item;
public List<LootAction> Actions;
}
Теперь вот пример файла JSON, который я хочу преобразовать в объект LootEvent:
{
"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}]
}
Как видите, поля «Предмет» нет, это потому, что поле «Оружие» является производным классом Предмета:
Вот класс предметов:
public class Item
{
public string Name;
public int Bonus;
}
А вот класс оружия:
public class Weapon : Item
{
}
У меня есть другой производный класс от Предмета, который выполнен в том же стиле, что и класс "Оружие", как класс "Броня" или "Зелье".
Теперь я использую этот метод для преобразования моего файла json:
//the "json" variable is a string that contains all of the JSON file text
JsonConvert.DeserializeObject<LootEvent>(json);
Поэтому, когда я преобразовываю JSON-файл в LootEvent, все поля передаются в объект LootEvent, кроме атрибута Item, потому что в JSON нет поля Item, но есть Оружие или Броня или любой другой производный класс Item.
Мой вопрос: как я могу десериализовать этот производный класс?