抽象基类 A,
B继承A,即B:A
C继承A,即C:A
D继承A,即D:A
我现在想序列化对象 Dictionary<string,A> , 但因为它的类型是基类,里边的Value有可能是子类B、C、D类型, 我想知道怎么进行json序列化和反序列化?
因为序列化时一般要指定类型,这样的话好像就不能直接用下面这个类进行序列化了。
public static string JsonSerialize<T>(T t) { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, t); string jsonString = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return jsonString; }
直接用A引用序列化应该是没问题的,反序列化不行
这个模式应该是比较常见的吧,难道没有人遇到过这种序列化的情况?
@沧海一杰: 序列化时是可以通过反射要序列化的对象来获取类型信息,所以这样做没有问题.
反序列化没有类型信息只能通过泛型或者其它方式指定要创建的实例类型,所以指定基类时,只能出来基类对象
@吴瑞祥: 那看来只能foreach加类型判断然后 json嵌套json了
@沧海一杰: 还好只有两级,如果有5级以上的类继承,那不是要被弄死了
JsonSerialize<B>(t);
JsonDeserialize<B>(ref t);