直接上代码:
public class BaseCard { public virtual int ID { get; set; } } public class Card1 : BaseCard { public int CID1 { get; set; } } public class Card2 : BaseCard { public int CID2 { get; set; } } public class Test { public List<BaseCard> List { get; set; } }
上面定义4个类,下面是应用:
var t = new Test(); t.List = new List<BaseCard>(); t.List.Add(new Card1 { ID = 1, CID1 = 99 }); t.List.Add(new Card2 { ID = 2, CID2 = 88 }); var s = JsonConvert.SerializeObject(t); var t2 = JsonConvert.DeserializeObject<Test>(s);
问题来了,t2里面的List里面的实例已经不是子类了,子类的数据也没了。
我要的结果是序列化是什么样数据,反序列化回来还是怎么样的数据
JSON序列化的特点是节省字符长度,并且javascript是动态类型的,对于类没有啥敏感度,只要字段属性名对得上就行。
这种情况使用JSON。
而如果你希望在C#里面操作,希望保留完整的类信息,这时候使用XML序列化是一个更好的选择。
开着法拉利,非要给法拉利加个功能,能越野。
开着悍马,却想和跑车比快,这都是好奇怪的做法。
需要保存子类信息.直接这样操作是不行.
比如用一个字段保留类型信息
https://github.com/wrx362114/EasyMQService/blob/master/src/ES.Framework/RabbitMQ/EventHandler/TimedTaskHandler.cs
这个33行的做法就是.
我之前遇到过类似的问题,做了一个模块https://www.npmjs.com/package/esserializer,可以在序列化/反序列化过程中保留父类子类信息。