架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

序列化与反序列化示例一

Posted on 2008-10-14 20:39  chen eric  阅读(328)  评论(0编辑  收藏  举报

我是想做一个服务器程序接受客户端的登陆:  
  客户端连接服务器,序列化数据后传给服务器,服务器接收后反序列化  
   
   
  客户端序列化代码:  
  public   byte[]   Serialize(object   obj)  
                  {  
                          BinaryFormatter   binaryF   =   new   BinaryFormatter();  
                          MemoryStream   ms   =   new   MemoryStream(1024   *   10);  
                          binaryF.Serialize(ms,   obj);  
                          ms.Seek(0,   SeekOrigin.Begin);  
                          byte[]   buffer   =   new   byte[(int)ms.Length];  
                          ms.Read(buffer,   0,   buffer.Length);  
                          ms.Close();  
                          return   buffer;  
                  }  
   
   
  服务器端反序列化代码:  
                  public   object   Deserialize(byte[]   pBytes)  
                  {  
                          object   _newOjb   =   null;  
                          if   (pBytes   ==   null)  
                                  return   _newOjb;  
                          System.IO.MemoryStream   _memory   =   new   System.IO.MemoryStream(pBytes);  
                          _memory.Position   =   0;  
                          BinaryFormatter   formatter   =   new   BinaryFormatter();  
                          formatter.FilterLevel   =   System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;  
                          _newOjb   =   formatter.Deserialize(_memory);  
                          _memory.Close();  
                          return   _newOjb;  
                  }  
   
  未处理的“System.Runtime.Serialization.SerializationException”类型的异常出现在   mscorlib.dll   中。  
   
  其他信息:   无法找到程序集“Client,   Version=0.0.0.0,   Culture=neutral,   PublicKeyToken=null”。  
   
  客户端的序列化是在class   client中进行的,怎么解决这个问题。  
   
  我搜索了以前的帖子,没有找到办法,google、baidu上也没个明确知道的。

***********************************************

没做过,不过猜测是你客户端的某个程序集没有包含在服务端内.  
   
  如果调试,出错猜测   是在这一句   _newOjb   =   formatter.Deserialize(_memory);

 

**********************************************

曾经也是这么做的,把对象序列化了再传递。我用的序列化以及反序列化方法如下:  
                  ///   <summary>  
                  ///     将对象序列化为byte数组  
                  ///   </summary>  
                  ///   <param   name="obj"></param>  
                  ///   <returns></returns>  
                  public   static   byte[]   SerializeObject(object   obj)  
                  {  
                          IFormatter   formatter   =   new   BinaryFormatter();  
                          MemoryStream   stream   =   new   MemoryStream();  
                          formatter.Serialize(stream,   obj);  
                          byte[]   result   =   stream.ToArray();  
                          stream.Close();  
                          return   result;  
                  }  
   
                  ///   <summary>  
                  ///   从byte数组中还原对象  
                  ///   </summary>  
                  ///   <param   name="buf"></param>  
                  ///   <returns></returns>  
                  public   static   object   DeserializeObject(byte[]   buf)  
                  {  
                          IFormatter   formatter   =   new   BinaryFormatter();  
                          MemoryStream   stream   =   new   MemoryStream(buf);  
                          object   obj   =   formatter.Deserialize(stream);  
                          stream.Close();  
                          return   obj;  
                  }