U3DC.COM | 优三帝研究院

Menu

使用Json.Net 序列化和反序列化接口(Interface)

使用NewtonJson序列化复杂的数据时,若其中包含了接口类型,就会报错:

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中添加类型属性,反之就不添加。

具体实例:
序列化

 private void SerializeJson()
        {
            var indented = Formatting.Indented;
            var settings = new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.All
            };
            var jsonmeta = JsonConvert.SerializeObject(_data, indented, settings);
            File.WriteAllText(Path, jsonmeta);
        }

反序列化:

  private Dictionary DeserializeJson()
        {
            if (!File.Exists(path)) return null;
            var settings = new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.All
            };
            return JsonConvert.DeserializeObject>(File.ReadAllText(path), settings);
        }
打赏
— 于 共写了1039个字
— 文内使用到的标签:

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据