[英]newtonsoft json serializer for Abstract Classes
我下面有一個從抽象類繼承的具體類:
[Serializable]
public class MyConcreteClass : MyAbstractClass
{
public string MyProperty { get; set; }
}
[Serializable]
public abstract class MyAbstractClass { }
嘗試反序列化 MyconcreteClass 類時,NewtonSoft JSON Serializer 在下面拋出異常:
Newtonsoft.Json.JsonSerializationException:無法創建 MyAbstractClass 類型的實例。 類型是接口或抽象類,不能被實例化。 小路 ....
做了一些谷歌搜索並在下面找到了這個設置:
var settings = new JsonSerializerSettings()
{
TypeNameHandling = TypeNameHandling.All
};
如果我使用上面的設置,即 TypeNameHandling.All,錯誤就會消失。
我心中的疑問:
這是解決此問題的正確方法嗎(並且不確定此選項不是開箱即用的)
我應該注意此設置的任何性能或負面影響。
謝謝。
1.這是解決此問題的正確方法嗎(並且不確定此選項不是開箱即用的)
我認為這是使用 NewtonSoft JSON 反序列化繼承類的正確方法。 當我們通過設置TypeNameHandling = TypeNameHandling.All進行反序列化時,序列化時將始終包含 .NET 類型名稱。 沒有類型信息,轉換器很難決定哪個類將被反/序列化。
2. 我應該注意此設置的任何性能或負面影響。
正如 Json.NET 文檔中所述,當您的應用程序從外部源反序列化 JSON 時應謹慎使用 TypeNameHandling,並且在使用 TypeNameHandling.None 以外的值反序列化時,您應該創建自定義 SerializationBinder。
您可以參考以下鏈接http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_TypeNameHandling.htm https://mallibone.com/post/serialize-object-inheritance-with-json.net
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.