C# 的 newtonsoft.json如何才能序列化class时,在json中附加对应className?就像GenericJackson2JsonRedisSerializer 那样?
GenericJackson2JsonRedisSerializer的效果:
我想在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"}]