日期:2014-05-20  浏览次数:20954 次

求.net序列化在网络传输的细节?
当一个实体类序列化后在网络中传输到目标程序后反序列化可以完全还原.
求这个过程的细节,
我自己做的时候如下:
class myclass
{
  int a;
  string str;
}

首先将各成员组成字符串,按"#"号分开,然后用Encoding.GetByte()方法转换,传输过去后,再按相反的方法还原,
这中间就有个弊端,"#"该怎么传输?
.net中是怎么处理这些细节的,是怎么序列化和还原的

------解决方案--------------------
.NET本身的序列化功能是有一个专门的叫做格式化器的东西 可以讲对象序列化成不同的格式 比如二进制流,json,或者XML,序列化得时候会把对象的程序集,类型也写进去,然后反序列化得时候会加载程序集,(如果程序集不存在,那就会扔异常)获得对象的类型对象type,并在内存中开辟一个该对象大小的内存区域,并且全部置为0,然后获取里面的所有MemberInfo,遍历MemberInfo的时候读取序列化的数据,进行对象中数据的还原
某一种格式化器进行序列化的对象也只能用相对应的反序列化器
对于你的特殊字符如# 对于.net来说基本不是问题,因为通常我们都是序列化成二进制流,无所谓你是什么字符
探讨

引用:

如果是WCF 那么序列化得时候和元数据一起传过去的 然后接收的通过一个代理类来获得反序列化的实体

我想知道还原的细节

------解决方案--------------------
如果我们约定10101=“五一搞什么”

那么我发送10101给你 你就懂啦

网络传输的约定

用什么协议啊 用什么编码啊....

一致的协议和一致的编码 我发一大堆1010101110101给你 你才有办法还原成我要说什么

这就是细节

另外.net已经自带了序列话功能 只要一个类申明为[Serializable()]就可以了
如果你是打算用网络传输的 学学WCF把

不要自己去拼什么#了 费力不讨好