我有下面從抽象類繼承的具體類:試圖去當newtonsoft JSON序列化的抽象類
[Serializable]
public class MyConcreteClass : MyAbstractClass
{
public string MyProperty { get; set; }
}
[Serializable]
public abstract class MyAbstractClass { }
NewtonSoft JSON序列拋出異常以下/串行MyconcreteClass類:
Newtonsoft.Json.JsonSerializationException:無法創建類型爲MyAbstractClass的 實例。類型是一個接口或摘要 類,不能實例化。路徑....
做了一些谷歌上搜索,發現低於此設定:
var settings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.All
};
如果我使用上述設置,即TypeNameHandling.All,錯誤消失。
問題在我的腦海:
是,這是解決這個問題(而且不知道該選擇什麼都不開盒即用)
任何性能或消極的影響正確的做法,我應該知道這個設置。
謝謝。
當使用'TypeNameHandling'你需要用一個自定義序列化粘結劑檢查輸入的類型,出於安全原因。見例如[在Newtonsoft Json中的TypeNameHandling警告](http://stackoverflow.com/q/39565954/3744182)。有關替代策略,請參閱[使用json.net反序列化不使用類型信息的多態json類](http://stackoverflow.com/q/19307752/3744182)。 – dbc
@dbc [此鏈接](http://stackoverflow.com/questions/29124126/polymorphic-json-deserialization-failing-using-json-net)更好,因爲它修復了第二個鏈接中的錯誤,如果json對象是遞歸。 –