C#中的序列化和反序列化詳解


什么是序列化與反序列化???

序列化和反序列化,我們可能經常會聽到,其實通俗一點的解釋,序列化就是把一個對象保存到一個文件或數據庫字段中去,反序列化就是在適當的時候把這個文件再轉化成原來的對象使用。

序列化和反序列化的主要作用有:

  1、在進程下次啟動時讀取上次保存的對象的信息

  2、在不同的AppDomain或進程之間傳遞數據

  3、在分布式應用系統中傳遞數據

  .............

常見的序列化的方法:

  1、BinaryFormatter

  2、SoapFormatter

  3、XML序列化

用法:

  BinaryFormatter的用法大致如下:  

 //BinaryFormatter將對象序列化到文件中
 List<string> inputList = new List<string>() { "潮流時尚公子","http://gz168168.taobao.com","歡迎專注技術的程序袁來看看筆者的網店哦"};
 using (FileStream fsWriter = new FileStream(@"gz168168.tmp",FileMode.Create,FileAccess.Write))
 {
       BinaryFormatter bf = new BinaryFormatter();
       //序列化
       bf.Serialize(fsWriter, inputList);
 }

 //BinaryFormatter將文件中的數據反序列化出來
 List<string> outputList = new List<string>();
 using (FileStream fsReader = new FileStream(@"gz168168.tmp",FileMode.Open,FileAccess.Read))
 {
       BinaryFormatter bf = new BinaryFormatter();
       //反序列化
       outputList = (List<string>)bf.Deserialize(fsReader);
 }

  XML序列化的用法大致如下: 

//xml序列化到test.xml文件中
List<string> inputList = new List<string>() { "潮流時尚公子","http://gz168168.taobao.com"};
using (FileStream fsWriter = new FileStream(@"test.xml",FileMode.Create,FileAccess.Write))
{
      XmlSerializer xs = new XmlSerializer(typeof(List<string>));
      xs.Serialize(fsWriter, inputList);
}

//從test.xml文件中反序列化出來
List<string> outputList = new List<string>();
using (FileStream fsReader = new FileStream(@"test.xml",FileMode.Open,FileAccess.Read))
{
     XmlSerializer xs = new XmlSerializer(typeof(List<string>));
     outputList = xs.Deserialize(fsReader) as List<string>;
}

總結:

 
兩個的用法大致如下:
 
序列化:
  1.得到一個存儲對象的類型
  2.創建一個寫入文件流
  3.定義要序列化的類型
  4.調用序列化方法
 
反序列化:
  1.定義一個裝載對象的類型
  2.創建一個讀出文件流
  3.定義要反序列化的類型
  4.調用反序列化方法
 
BinaryFormatter類進行序列化和反序列化,以縮略型二進制格式寫到一個文件中去,速度比較快,而且寫入后的文件已二進制保存有一定的保密效果。標記為NonSerialized的其他所有成員都能序列化。
 
采用xml序列化的方式只能保存public的字段和可讀寫的屬性,對於private等類型的字段不能進行序列化。
 
二進制序列化的優點: 
  1. 所有的類成員(包括只讀的)都可以被序列化;
  2. 性能非常好。
 
XML序列化的優點:
  1. 互操作性好;
  2. 不需要嚴格的二進制依賴;
  3. 可讀性強
 
SoapFormatter微軟淘汰了,,不能序列化泛型,這里就不多講了。

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM