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中额外的字段就丢失了

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

在父类中添加@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"}]