• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

如何理解C#中的序列化与反序列化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

序列化(Serialization)是.NET平台最酷的特性之一。
1、为什么要序列化:
首先你应该明白系列化的目的就不难理解他了。系列化的目的就是能在网络上传输对象,否则就无法实现面向对象的分布式计算。比如你的客户端要调用服务器上的一个方法获得一个产品对象,比如方法为:public   Product   findProduct(int   product_id);  
  注意该方法返回一个Product对象,如果没有系列化技术,客户端就收不到返回的对象Product。而序列化的实现就是把对象变成一个可在网络上传输的字节流。

2、利用序列化技术,可以实现对象的备份和还原。序列化可以将内存中的对象(或对象图)序列化为数据流,并保存到磁盘上进行持久化;还可以将数据流反序列化为对象,实现对象的还原。序列化技术在分布式系统的数据传输中得到充分的利用,如:XML Web Service 利用XML序列化实现跨平台,.NET Remoting 则用到了二进制序列化和SOAP序列化。

.NET Compact Framework 2.0 支持XML序列化,不支持二进制序列化和SOAP序列化。而 .NET Compact Framework 1.0 连XML序列化都不支持。不过 OpenNETCF 1.x 为 .NET CF 1.0 实现了一个XML序列化的类,这个类在 OpenNETCF.Xml.dll 程序集中可以找到。

序列化和反序列化用于将一个对象保存到文件,和从文件读取。  
  using   System.IO;  
  using   System.Runtime.Serialization.Formatters.Binary;  
  [Serializable()]//可以序列化的类需要用这个属性标记  
  public   class   ToBeSerialized  
  {  
  public   int   a;  
  public   string   b;  
  public   ToBeSerialized(int   a,string   b)  
  {  
  this.a=a;  
  this.b=b;  
  }  
  }  
  public   class   Test  
  {  
   
  public   void   Serialize()//序列化  
  {  
  ToBeSerialized   tbs = new   ToBeSerialized(22,"SOM");  
  Stream   fs   =   File.Create("Serialized.txt");  
  BinaryFormatter   serializer   =   new   BinaryFormatter();  
  serializer.Serialize(fs,   tbs);  
  fs.Close();  
  }  
  public   void   DeSerialize()//反序列化  
  {  
  ToBeSerialized   restore;  
  Stream   fs   =   File.OpenRead("Serialized.txt");  
  BinaryFormatter   deserializer   =   new   BinaryFormatter();  
  restore   =   (ToBeSerialized)(deserializer.Deserialize(fs));//反序列化得到的对象  
  fs.Close();  
  }   
  }

在 .NET CF 2.0 中使用XML序列化很简单,跟 .NET Framework 中的一样。

            

// XML序列化 Customer 数组

using (System.IO.MemoryStream ms = new System.IO.MemoryStream())

{

Customer[] customers = GetCustomers(); //从数据库或远程服务器获取客户

System.Xml.Serialization.XmlSerializer ser =

new System.Xml.Serialization.XmlSerializer(typeof(Customer));

ser.Serialize(ms, customers);

byte[] buffer = ms.ToArray();

// 获取XML文档的内容

string xml = System.Text.Encoding.ASCII.GetString(buffer , 0, buffer .Length);

}

// XML反序列化 Customer 数组

using (System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer))

{

System.Xml.Serialization.XmlSerializer ser =

new System.Xml.Serialization.XmlSerializer(typeof(Customer));

Customer[] customers = ser.Deserialize(ms) as Customer[];

}

以上示例将对象序列化后,写入内存流中。你可以换成文件流(FileStream),这样就可以实现对象的持久化。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#多线程编程实例实战发布时间:2022-07-14
下一篇:
理解C#4dynamic(3)–DynamicObject的使用发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap