用于抽象类的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,错误就会消失。

我脑海中的问题:

  1. 这是解决这个问题的正确方法吗(不确定这个选项是什么)

  2. 我应该意识到这种设置的任何性能或负面影响。

谢谢。

1。这是解决这个问题的正确方法吗(不确定这个选项是什么)
我认为用NewtonSoft JSON对继承类进行反序列化是正确的方法。当我们使用设置TypeNameHandling=TypeNameHandling.All进行反序列化时,序列化时将始终包含.NET类型名称。如果没有类型信息,转换器很难决定要对哪个类进行反序列化。

2.我应该注意此设置的任何性能或负面影响
如Json.NET文档中所述,当应用程序从外部源反序列化Json时,应谨慎使用TypeNameHandling,并且当使用TypeNameHandle以外的值反序列化时,应创建自定义SerializationBinder。无。
您可以引用以下链接http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_TypeNameHandling.htmhttps://mallibone.com/post/serialize-object-inheritance-with-json.net

相关内容

  • 没有找到相关文章

最新更新