首页 新闻 会员 周边

json 序列化的问题?

0
悬赏园豆:10 [已解决问题] 解决于 2014-07-18 14:50

抽象基类 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;
        }
 
空明流光的主页 空明流光 | 初学一级 | 园豆:106
提问于:2014-07-17 14:08
< >
分享
最佳答案
0

直接用A引用序列化应该是没问题的,反序列化不行

收获园豆:10
吴瑞祥 | 高人七级 |园豆:29449 | 2014-07-17 14:12

这个模式应该是比较常见的吧,难道没有人遇到过这种序列化的情况?

空明流光 | 园豆:106 (初学一级) | 2014-07-17 14:18

@沧海一杰: 序列化时是可以通过反射要序列化的对象来获取类型信息,所以这样做没有问题.

反序列化没有类型信息只能通过泛型或者其它方式指定要创建的实例类型,所以指定基类时,只能出来基类对象

吴瑞祥 | 园豆:29449 (高人七级) | 2014-07-17 14:24

@吴瑞祥: 那看来只能foreach加类型判断然后 json嵌套json了

空明流光 | 园豆:106 (初学一级) | 2014-07-17 14:45

@沧海一杰: 还好只有两级,如果有5级以上的类继承,那不是要被弄死了

空明流光 | 园豆:106 (初学一级) | 2014-07-17 14:46
其他回答(1)
0

JsonSerialize<B>(t);

JsonDeserialize<B>(ref t);

Launcher | 园豆:45045 (高人七级) | 2014-07-17 14:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册