在我作为副项目编写的小库中,我使用 RestSharp 从 Web API 获取 Json。模型类的反序列化适用于简单类型,但在请求时存在结果类型未知(或不清楚)的端点。
特别是它的 GuildWars2 API v1 和一个例子是项目数据。当然,每个项目都有基本属性,并且根据查询的项目设置附加值。例如武器有一些修饰符等等。
我的想法是为所有基本属性创建一个抽象 Item 类,并从该类派生所有现有的项目子类型添加所需的属性。我的问题是,如何决定要反序列化到哪个子类。我已经阅读了涉及将限定类型名称添加到 Json 字符串的各种方法,但是由于我只从 API 获取数据,因此我无法影响我得到的响应。
理想情况下,我总是希望反序列化到基类 Item 中,反序列化器通过 Json 字符串中包含的给定属性决定实际类型。这可能吗?或者有没有更好的方法来解决这个问题?
提前致谢
编辑:这是一个武器的示例 Json:
{
"item_id": "30704",
"name": "Twilight",
"description": "",
"type": "Weapon",
"level": "80",
"rarity": "Legendary",
"vendor_value": "100000",
"icon_file_id": "456031",
"icon_file_signature": "CE3AF0B7B9BB6244726779F5B6A930541BA6C15F",
"game_types": ["Activity", "Dungeon", "Pve", "Wvw"],
"flags": ["HideSuffix", "NoSell", "SoulBindOnUse"],
"restrictions": [],
"weapon": {
"type": "Greatsword",
"damage_type": "Physical",
"min_power": "995",
"max_power": "1100",
"defense": "0",
"infusion_slots": [],
"infix_upgrade": {
"attributes": [
{
"attribute": "Power",
"modifier": "179"
},
{
"attribute": "Power",
"modifier": "179"
}
]
},
"suffix_item_id": "24599"
}
}
这将是一件盔甲:
{
"item_id":"500",
"name":"Carrion Conjurer Chest of Dwayna",
"description":"",
"type":"Armor",
"level":"68",
"rarity":"Rare",
"vendor_value":"257",
"icon_file_id":"61023",
"icon_file_signature":"76CD08463A05730071D400254141B50E570662D3",
"game_types":["Activity", "Dungeon", "Pve", "Wvw"],
"flags":["SoulBindOnUse"],
"restrictions":[],
"armor": {
"type":"Coat",
"weight_class":"Light",
"defense":"221",
"infusion_slots":[],
"infix_upgrade": {
"attributes": [
{
"attribute":"ConditionDamage","modifier":"70"
},
{
"attribute":"Power","modifier":"50"
}
]
},
"suffix_item_id":"24767"
}
}
我想根据属性“Type”的内容反序列化,但我不知道这将如何工作=/