qiuzhizhe8888 2022-03-17 11:05 采纳率: 37.5%
浏览 31

C# 的 newtonsoft.json如何才能序列化class时,在json中附加对应className?

C# 的 newtonsoft.json如何才能序列化class时,在json中附加对应className?就像GenericJackson2JsonRedisSerializer 那样?

GenericJackson2JsonRedisSerializer的效果:

img


要这种效果的原因:如果不这样的话,如果要序列化的对象中,含有互为父类、子类的,子类是分不出来的。

我想在json中添加className并不是目的。只是想解决,比如A是B和C的父类 List 中存的是B和C的实例。
那么把List序列化为json,但json再反序列化为List,就会导致,B和C都变成A,而B和C中额外的字段就丢失了

所以,如果有其他方式解决这个问题,那就更好了。越简单越好。希望是库本身就有个参数能开启,而不是说,自己写自定义解析器之类的

  • 写回答

1条回答 默认 最新

  • 码老头 2022-03-17 11:56
    关注

    在父类中添加@Class的属性,示例如下:

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApp2
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                var list = new List<A>
                {
                    new B{Id = 1,PropB = "B"},
                    new C{Id = 2,PropC = "C"}
                };
                var json = JsonConvert.SerializeObject(list);
                Console.WriteLine(json);
                Console.ReadKey();
            }
        }
    
        internal class A
        {
            public int Id { get; set; }
            public string @Class => GetType().Name;
            public string @FullClass => GetType().FullName;
        }
    
        internal class B : A
        {
            public string PropB { get; set; }
        }
        internal class C : A
        {
            public string PropC { get; set; }
        }
    }
    

    运行结果:

    [{"PropB":"B","Id":1,"Class":"B","FullClass":"ConsoleApp2.B"},{"PropC":"C","Id":2,"Class":"C","FullClass":"ConsoleApp2.C"}]
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月17日

悬赏问题

  • ¥50 这Mac系统提示虚拟内存不足,怎么解决
  • ¥15 Rs232电路无法收发数据,求帮助
  • ¥15 百度cookie扫码登录器
  • ¥15 微机原理汇编语言debug调试实验
  • ¥23 matlab可以把相图转换为庞加莱映射吗
  • ¥15 Arduino电机和openmv连接异常
  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件