我有一個通用類型Container<IContentType>
其中接口IContentType
可以是四個具體ContentX
類型之一。反序列化一個通用類型
我序列化,一切都很好。
當使用Newtonsoft反序列化時,我使用自定義類型轉換器和var model = JsonConvert.DeserializeObject<Container<ContentA>>(json, settings)
工程。調試器顯示我有一個Container<ContentA>
對象。
我的計劃是反序列化以嘗試對四種可能的ContentX
類型中的每一種進行反序列化,並在默認情況下捕獲一個異常,直到我「猜出」正確的異常。
但是,如果我這樣做的方法中,像這樣:
public static Container<IContentType> Deserialize(jsonfile)
{
...
var model = JsonConvert.DeserializeObject<Container<ContentA>>(json, settings)
return model;
}
我得到「無法隱式轉換Container<ContentA>
到Container<IContentType>
」。 ContentA
器具IContentType
。
有沒有一種方法可以創建一個演員操作,轉換,動態或使隱式轉換工作?
爲什麼不只是'JsonConvert.DeserializeObject>(json,settings)作爲Container '? –
您已遇到差異問題。例如,即使'string'是'object'的子類,你不能將'List'強制轉換爲'List
您將需要爲'IContentType'創建一個自定義的'JsonConverter',並按照[如何在JSON.NET中實現自定義JsonConverter來反序列化基類對象的列表]這兩行來推斷正確的具體類型?](https:// stackoverflow.com/q/8030538/3744182)或[使用json.net反序列化沒有類型信息的多態json類](https://stackoverflow.com/q/19307752/3744182)或[Json.Net帶多形子類型的序列化對象(https://stackoverflow.com/q/29528648/3744182)。然後你可以反序列化到'Container'。 –
dbc