我有下面从抽象类继承的具体类:试图去当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对象是递归。 –