首先給大家介紹一下序列化是用來乾什麼的,他為什麼出現 序列化這種技術說到底其實就是把臨時數據保存在電腦上。大家都知道對於程式而言對象是一種稍縱即逝的數據,不僅僅是程式重啟、電腦重啟,就連內部函數的變化也有可能導致對象的消失,但是總有一些對象是大家不想讓其隨意消失的並且想在下一次開啟程式的時候進行載入 ...
首先給大家介紹一下序列化是用來乾什麼的,他為什麼出現
序列化這種技術說到底其實就是把臨時數據保存在電腦上。大家都知道對於程式而言對象是一種稍縱即逝的數據,不僅僅是程式重啟、電腦重啟,就連內部函數的變化也有可能導致對象的消失,但是總有一些對象是大家不想讓其隨意消失的並且想在下一次開啟程式的時候進行載入,在這種環境下-序列化便出現了,它的意義就是為了保持對象的持久化
在此我為大家介紹一下C#當中的XML序列化和二進位序列化,基本所有序列化的方式都差不多因此就著重介紹這兩種比較常用的序列化方式
假設類名為:Person 對象名為:P
一: XML序列化
第一步當然是引入命名空間:Using System.IO; Using System.Xml.Serialization;
先實例化我們的類-XmlSerializer
XmlSerializer xml = new XmlSerializer(typeof(Person));
實例化類時的參數為一個Type類型,利用typeof就可以了,typeof裡面傳入類名
創建出對象xml後開始創FileStream的對象
FileStream fs = new FileStream("asd.xml",FileMode.OpenOrCreate);
實例化該類時傳入的參數有兩個,第一個是你為文件起的名字-string,第二個是你對IO的操作、一般預設為FileMode.OpenOrCreat
然後就是序列化了~ 方法-Serialize
xml.Serialize(fs,P);
用Serialize這個方法的兩個參數分別是實例化FileStream的對象名-fs 以及你想要保存的對象的名-P
完成這個方法後,我們的XML序列化就結束了~
我們想要反序列化的話也簡單,就是最後調用的方法不一樣,在此用方法-Doserialize
Object obj = xml.Doserialize(fs);
用這個方法只要傳入實例化FileStream的對象名-fs 就可以了,他有一個Object類型的返回值,接受它,然後把它強轉為你需要的類型就OK了
二:二進位序列化
二進位序列化和XML序列化的架構差不多
首先也是引入命名空間:Using System.IO;
Using System.Runtime.Senalization.Formatter.Binary;
先實例化我們的類-BinaryFormatter
BinaryFormatter bin = new BinaryFormatter();
此類實例化時不用參數哦~
然後創FileStream的對象
FileStream fs = new FileStream("asd.xml",FileMode.OpenOrCreate);
實例化該類時傳入的參數有兩個,第一個是你為文件起的名字-string,第二個是你對IO的操作、一般預設為FileMode.OpenOrCreat
然後就是序列化了~ 方法-Serialize
bin.Serialize(fs,P);
用Serialize這個方法的兩個參數分別是實例化FileStream的對象名-fs 以及你想要保存的對象的名-P
完成這個方法後,我們的二進位序列化就結束了~
Object obj = bin.Doserialize(fs);
用這個方法只要傳入實例化FileStream的對象名-fs 就可以了,他有一個Object類型的返回值,接受它,然後把它強轉為你需要的類型就OK了
雖然兩者大部分都是一致的,但是二進位序列化的要求更加多,如下:
1)要進行序列化的類型、類型的父類以及類型中的所有成員的類型都統統要求標記為:
[Serializable]
2) 二進位序列化只能對類中的欄位進行序列化,如果有一些欄位不想讓其序列化只要標記為:
[NonSerialized]