新文章 网摘 文章 随笔 日记

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();

 

posted @ 2020-06-28 11:20  岭南春  阅读(820)  评论(0)    收藏  举报