【发布时间】:2020-01-09 00:12:38
【问题描述】:
我正在使用改造开发 API 包装器,但在创建返回的对象类时遇到问题,因为来自同一端点的某些项目可能包含不同类型的字段。
例如,对于基本项目,返回的 JSON 可能如下所示:
{
"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": ""
}
}
不同项目类型之间的详细信息字段可能会有很大差异,我希望有一种简单的方法来访问与每种类型对应的字段,而无需包装器消费者必须将类型转换为空的特定类型子类像其他包装器一样需要基类,比如one of the best wrappers do。
是否有某种方法可以根据父项的类型或类似的方式隐藏字段,以便我可以在项目类中包含所有可能的字段?
有什么建议吗?
【问题讨论】:
-
我认为改造只在 JSON 中返回的填充字段,所以如果有没有 JSON 值的额外字段(例如基本项),那么它们将为空。
-
@Scary Wombat 最好,如果可能的话,我希望他们根本不在那里。但是如果没有办法,那么包含所有字段的详细信息类是最好的方法。
-
你可以对item进行更详细的序列化,获取任意字段的值,但首先比较你想获取的字段是否有值。
-
@Scary Wombat 我肯定会选择包含所有字段的详细信息类,所以如果你想把它作为答案,以便我接受它,我会很高兴。谢谢您的帮助。不知道或在文档中找到将缺失值设置为 null 的任何信息。认为它会为此抛出异常。