在我的小型庫中,我正在編寫一個側面項目,我使用RestSharp從Web API獲取Json。對模型類的反序列化對於簡單類型來說工作正常,但在請求時存在結果類型未知(或不清楚)的端點。將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"
}
}
我想反序列化基於「類型」屬性的內容,但我不明白,這將如何工作=/
你能展示一個你從API獲得的JSON的例子嗎? – mallan1121
@ mallan1121編輯我的帖子 – MrFloya