C# C/S反序列化对象时提示:输入流是无效的二进制格式,错误源是mscorlib

服务器可以成功的反序列化客户端发过来的User对象,但是反序列化ScanfAppTaskInfo对象时提示:输入流是无效的二进制格式。其中User对象和ScanfAppTaskInfo对象定义在了同一个ClassLibrary中,并且生成的ClassLibrary.dll文件客户端和服务器同时都引用了,定义User类和ScanfAppTaskInfo类的时候也都同时加上了[Serializable],序列化和反序列化User对象和ScanfAppTaskInfo对象用的是相同的方法,那反序列化ScanfAppTaskInfo对象时出错会是什么原因呢?下面是分别是序列化和反序列化User对象和ScanfAppTaskInfo对象的代码
User类的定义

ScanfAppTaskInfo类的定义

初始化User对象并序列化

反序列化User对象

初始化ScanfAppTaskInfo对象并序列化

反序列化ScanfAppTaskInfo对象

画红框的地方是出错的地方,提示输入流是无效的二进制格式,错误源是mscorlib

第1个回答  2013-09-18
DataTable类型不支持序列化。
我看到你的类里面有个DataTable dtper追问

datatable是可以序列化和反序列化的,这个我已经实现了

追答

看了你反序列化的代码,发现你传的byte数组里面还包含了cmd数据。
那就明显了,你去除cmd数据时出问题了。如果去除多了或者少了,都会影响你下面的反序列化。

你可以debug下,你两次反序列化时leng的值是否一样,如果不一样,那就是leng传错了。

追问

服务器这边已经把命令解析出来了,也进相应的case语句了,leng值是指定的,是20,不是传过来的。。

本回答被提问者采纳
第2个回答  2013-09-18
定义两个memstream.追问

什么意思,在哪定义两个?

相似回答