c # десериализовать производный класс в файле JSON - PullRequest
0 голосов
/ 22 мая 2019

Я работаю над приложением игровой консоли, которое десериализует 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.

Мой вопрос: как я могу десериализовать этот производный класс?

...