序列化和反序列化


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

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

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

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

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

6.序列化算法一般會按步驟做如下事情:

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

7.序列化的好處:

一是實現了數據的持久化,通過序列化可以把數據永久地保存到硬盤上(通常存放在文件里),

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

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只能對共有字段進行序列化。

 


免責聲明!

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



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