什么是序列化與反序列化???
序列化和反序列化,我們可能經常會聽到,其實通俗一點的解釋,序列化就是把一個對象保存到一個文件或數據庫字段中去,反序列化就是在適當的時候把這個文件再轉化成原來的對象使用。
序列化和反序列化的主要作用有:
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微軟淘汰了,,不能序列化泛型,這里就不多講了。