Newtonsoft.Json反序列化报错:Type is an interface or abstract class and cannot be instantiated
Newtonsoft.Json反序列化复杂类型,其中包含接口类型时出错,错误信息:Type is an interface or abstract class and cannot be instantiated。
解决方案:序列化和反序列化时添加JsonSerializerSettings,属性TypeNameHandling设置为TypeNameHandling.All。作用:就是设置Json.NET能够序列化接口或继承类的关键,将TypeNameHandling设置为All后,Json.NET会在序列化后的json文本中附加一个属性说明json到底是从什么类序列化过来的,也可以设置TypeNameHandling为Auto,表示让Json.NET自动判断是否需要在序列化后的json中添加类型属性,如果序列化的对象类型和声明类型不一样的话Json.NET就会在json中添加类型属性,反之就不添加
即是:
string str = JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto });
以上文章来源:https://www.cnblogs.com/yulin626/p/7761728.html
但实际 上可能仍然会出现问题,变通的办法,可以在接口或抽象类型设置默认值为实例化一个类,例如:
/// <summary> /// 数据库提供者信息 /// </summary> public IDbInfoProvider DbInfoProvider { get; set; } = new MsSqlDbInfoProvider();
浙公网安备 33010602011771号