Я работаю над оболочкой API с использованием модернизации, но у меня возникают проблемы с созданием возвращаемых классов объектов, поскольку некоторые элементы из одной и той же конечной точки могут содержать поля различного типа.
Например, возвращающийся JSON может выглядеть следующим образом для базового c предмета:
{
"name": "Box of Honed Splint Armor",
"description": "Double-click to unpack a full set of level 50 armor.",
"type": "Container",
"level": 0,
"rarity": "Masterwork",
"vendor_value": 86,
"game_types": [
"Wvw",
"Dungeon",
"Pve"
],
"flags": [],
"restrictions": [],
"id": 9000,
"chat_link": "[&AgEoIwAA]",
"icon": "https://render.guildwars2.com/file/72D04673660ECB7FD904680D487030A41106F952/63218.png",
"details": {
"type": "Default"
}
}
Или вот так для более подробного предмета:
{
"name": "Strong Soft Wood Longbow of Fire",
"description": "",
"type": "Weapon",
"level": 44,
"rarity": "Masterwork",
"vendor_value": 120,
"default_skin": "3942",
"game_types": [ "Activity", "Dungeon", "Pve", "Wvw" ],
"flags": [ "SoulBindOnUse" ],
"restrictions": [],
"id": 28445,
"chat_link":"[&AgEdbwAA]",
"icon": "https://render.guildwars2.com/file/C6110F52DF5AFE0F00A56F9E143E9732176DDDE9/65015.png",
"details": {
"type": "LongBow",
"damage_type": "Physical",
"min_power": 385,
"max_power": 452,
"defense": 0,
"infusion_slots": [],
"infix_upgrade": {
"attributes": [
{ "attribute": "Power", "modifier": 62 },
{ "attribute": "Precision", "modifier": 44 }
]
},
"suffix_item_id": 24547,
"secondary_suffix_item_id": ""
}
}
Поле данных может очень сильно отличаться между разными типы элементов, и я предпочел бы иметь простой способ доступа к полям, соответствующим каждому типу, без того, чтобы потребитель упаковщика набирал приведение к подклассу c со спецификацией типа пустого базового класса, как этого требуют другие оболочки, например одна из лучших обёрток do.
Есть ли способ скрыть поля в зависимости от типа родителя или чего-то подобного, чтобы я мог включить все возможные поля в класс элементов?
Есть предложения?