序列化和反序列化

1.序列化是指把對象轉換爲字節序列的過程,而反序列化是指把字節序列恢復爲對象的過程算法

2.對象序列化的最主要的用處就是在傳遞和保存對象的時候,保證對象的完整性和可傳遞性。序列化是把對象轉換成有序字節流,以便在網絡上傳輸或者保存在本地文件中。網絡

3.序列化機制的核心做用就是對象狀態的保存與重建。函數

4.反序列化就是客戶端從文件中或網絡上得到序列化後的對象字節流後,根據字節流中所保存的對象狀態及描述信息,經過反序列化重建對象。spa

5.序列化就是把實體對象狀態按照必定的格式寫入到有序字節流,反序列化就是從有序字節流重建對象,恢復對象狀態。.net

6.序列化算法通常會按步驟作以下事情:code

(1)將對象實例相關的類元數據輸出。
(2)遞歸地輸出類的超類描述直到再也不有超類。
(3)類元數據完了之後,開始從最頂層的超類開始輸出對象實例的實際數據值。
(4)從上至下遞歸輸出實例的數據orm

7.序列化的好處:對象

一是實現了數據的持久化,經過序列化能夠把數據永久地保存到硬盤上(一般存放在文件裏),blog

二是,利用序列化實現遠程通訊,即在網絡上傳送對象的字節序列。遞歸

8.反序列化的過程(從文件-->對象的過程),不是new出來新對象,而後對其進行賦值的。

9.在反序列化的時候,既不會爲成員初賦值,也不會執行構造函數,而是直接對沒有標註爲[NonSerialized]的字段賦給其保存在文件中的值,而對於標註爲[NonSerialized]的字段,其結果僅僅是default(FiledType),此處的FieldType是指字段的類型(注:能夠利用OnSerialized方法來過後修改字段的值)。

10..net framework的類庫中提供了三個能夠用於序列化和反序列化的類,分別爲BinaryFormatter、SoapFormatter和XmlSerializer。

11.BinaryFormatter能夠對單個對象,或集合對象(如List<T>、ObservableCollection<T>)進行序列化。

須要指出的是,須要對被序列化的對象添加[Serializable]特性。如:

[Serializable] public class Person { public string name; public int age; }

12.XmlSerializer,不管對於單個對象仍是集合對象(如List<T>、ObservableCollection<T>),均可以使用XmlSerializer進行序列化。須要指出的是,不須要對被序列化的對象添加[Serializable]特性註解。可是,使用XmlSeriabizable的時候,被序列化的對象應該具備無參數構造函數。

13.BinaryFormatter可以對全部字段(私有、保護、公有)進行序列化和反序列化,而XmlSerializer只能對共有字段進行序列化。

相關文章
相關標籤/搜索