首页新闻找找看学习计划

C#序列化和反序列化的问题

0
悬赏园豆:50 [已解决问题] 解决于 2014-07-28 11:01

比如我有一个接口  IA

然后类型 A实现了这个接口,然后类型B继承A了,A和B处于不同的程序集,并且B定义了它自有的属性字段.

然后有一个序列化方法

Serializable(A a)

我用它序列化了类型B的实例 ,  Serializable(b)

然后反序列化的时候我只想得到A的信息,但却提示找不到程序集B

我知道这个错误在于,序列化时传入的参数是B的实例,但我现在只想取到类型A的信息,请问有什么更好的办法 ?

现在我的处理方式是,在序列化之前再new一个类型A实例出来,再赋值给它,然后再进行序列化.

imegg的主页 imegg | 初学一级 | 园豆:8
提问于:2014-07-14 18:47
< >
分享
最佳答案
0

改用JSON序列化

收获园豆:30
滴答的雨 | 老鸟四级 |园豆:3690 | 2014-07-14 23:56

Json可能是解决方法,但是我这边要插入到MSMQ中,JSON不适合吧

imegg | 园豆:8 (初学一级) | 2014-07-15 11:13
其他回答(4)
0

反序列化后在转换啊,自带的反序列化最好不要用,因为他把类型等都放进去了,而不是序列化属性字段等

收获园豆:5
56180825 | 园豆:1126 (小虾三级) | 2014-07-14 21:30
0

2楼正解,使用Json序列化吧.

收获园豆:5
晓菜鸟 | 园豆:2564 (老鸟四级) | 2014-07-15 08:55
0

你是用的 BinaryFormatter 吗?

收获园豆:5
Launcher | 园豆:45030 (高人七级) | 2014-07-15 08:59

是的

支持(0) 反对(0) imegg | 园豆:8 (初学一级) | 2014-07-15 11:12

@imegg: 换成 XML 或者 JSON,或者 Marshal 方式就行了。你可以把 BinaryFormatter 序列化出来的内容看一下,它的头部会包含被序列化类的全称(程序集B.B),因此会提示你需要找到程序集 B 中的 B 类型。

支持(0) 反对(0) Launcher | 园豆:45030 (高人七级) | 2014-07-15 11:14
0

我记得有办法的 微软本身是支持的 你自己查查

收获园豆:5
小眼睛老鼠 | 园豆:2774 (老鸟四级) | 2014-07-15 13:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册