使用JSON.net,我想反序列化從抽象類繼承的類型列表。我已經使用KnownTypesBinder
(source)像使用JSON.net Binder/TypeNameHandling嵌套類型
var jsonSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.TypeNameHandling = TypeNameHandling.Auto;
jsonSettings.Binder = new KnownTypesBinder { KnownTypes = new List<Type> { ... } };
現在,這部作品在WEB API ModelBinder的完美的罰款;KnownTypesBinder.BindToType
被稱爲一個對象可以反序列化。在Web應用程序的不同部分,我必須反序列化JSON字符串,所以我想重新使用相同的JsonFormatter。根據文件,以下應該工作;
JsonConvert.DeserializeObject<T>(String, JsonSerializerSettings);
然而,當我做到這一點:
JsonConvert.DeserializeObject<A>(jsonString, GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings);
以下錯誤被拋出:
JsonSerializationException。無法創建類型C的實例。類型是接口或抽象類,無法實例化。
我的類型看起來像這樣;
class A {
public B B { get; set; }
}
class B {
public List<C> C { get; set; }
}
abstract class C { }
class C1: C { }
class C2: C { }
另外創建一個新的JsonSerializerSettings和設置Binder
和TypeNameHandling
沒什麼區別。我發現KnownTypesBinder.BindToType
根本沒有被調用。 JSON.net中是否有我缺少的東西?