我有以下問題,對此我無法解決:JSON.NET反序列化與類型參數對象
我有一個都實現一個名爲IProtocol
的接口不同的類。現在命名爲SimpleProtocol
,ParallelProtocol
。我想堅持這些對象,所以我用JSON.NET,一切正常。除了當我試圖反序列化他們它完美的作品時,我知道他們都應該是類型,例如:
SimpleProtocol p = JsonConvert.DeserializeObject<SimpleProtocol>(myJsonData);
不過,我現在在這裏我要加載的JSON數據,並獲得情況一個IProtocol
回來了,但這是可以理解的,JSON不允許;例如,這樣的事情確實不工作:
IProtocol p1 = JsonConvert.DeserializeObject<IProtocol>(myJsonData); // does not work
IProtocol p2 = (IProtocol)JsonConvert.DeserializeObject(myJsonData); // also, does not work
所以,仰視API我發現這個方法的簽名:
public static Object DeserializeObject(
string value,
Type type
)
它看起來就像我所需要的東西,通過這樣嘗試在一個字符串也持續類型和檢索它:
// test
Type protocolType = Type.GetType("MyApp.Protocols.SimpleProtocol");
IProtocol p1 = JsonConvert.DeserializeObject(myJsonData, protocolType);
我得到一個錯誤,這是不可能投下Newtonsoft.Json.Linq.JObject
至IProtocol
。這很奇怪,我不知道如何解決這個問題。
無法在泛型方法中傳遞Type對象,所以我基本停留在這裏。有沒有解決這個問題的方法,最好不使用反射?它在我看來這是一個非常正常的用例。
我可以做些什麼,但對我來說似乎有點'骯髒',是創建一個簡單的包裝類,其中包含一個IProtocol實例並序列化/反序列化?
你反序列化的單個元素或集合他們? – R0MANARMY 2013-03-02 19:20:07
您可能想看看這些問題,看看他們是否有所幫助:[在JSON.NET中爲反序列化投射接口](http://stackoverflow.com/q/5780888/164966),[如何實現自定義JsonConverter在JSON.NET中反序列化基類對象列表](http://stackoverflow.com/q/8030538/164966),[使用Json.NET轉換器反序列化屬性](http://stackoverflow.com/q/ 164966分之2254872)。 – R0MANARMY 2013-03-02 19:26:06
感謝您的提示,我已經閱讀過這些提示,但我的解決方案證明不同(請參閱下文)。 – avanwieringen 2013-03-04 08:33:39