程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> .NET序列化

.NET序列化

編輯:.NET實例教程

1.什麼是序列化
序列化是將對象狀態轉換為可保持或傳輸的格式的過程,在序列化過程中,對象的公共字段和私有字段以及類的名稱(包括包含該類的程序集)都被轉換為字節流,然後寫入數據流。與序列化相對的是反序列化,它將流轉換為對象。這兩個過程結合起來,可以輕松地存儲和傳輸數據。
2.為什麼使用序列化
a. 一個原因是將對象的狀態保持在存儲媒體中,以便可以在以後重新創建精確的副本。
我們經常需要將對象的字段值保存到磁盤中,並在以後檢索此數據。盡管不使用序列化也能完成這項工作,但這種方法通常很繁瑣而且容易出錯,並且在需要跟蹤對象的層次結構時,會變得越來越復雜。可以想象一下編寫包含大量對象的大型業務應用程序的情形,程序員不得不為每一個對象編寫代碼,以便將字段和屬性保存至磁盤以及從磁盤還原這些字段和屬性。序列化提供了輕松實現這個目標的快捷方法。
b.另一個原因是通過值將對象從一個應用程序域發送到另一個應用程序域中。
例如,序列化可用於在 ASP.Net 中保存會話狀態並將對象復制到 Windows 窗體的剪貼板中。遠程處理還可以使用序列化通過值將對象從一個應用程序域傳遞到另一個應用程序域中。

公共語言運行時 (CLR) 管理對象在內存中的分布,.NET 框架則通過使用反射提供自動的序列化機制。對象序列化後,類的名稱、程序集以及類實例的所有數據成員均被寫入存儲媒體中。對象通常用成員變量來存儲對其他實例的引用。類序列化後,序列化引擎將跟蹤所有已序列化的引用對象,以確保同一對象不被序列化多次。.Net 框架所提供的序列化體系結構可以自動正確處理對象圖表和循環引用。對對象圖表的唯一要求是,由正在進行序列化的對象所引用的所有對象都必須標記為 Serializable(請參閱基本序列化)。否則,當序列化程序試圖序列化未標記的對象時將會出現異常。
當反序列化已序列化的類時,將重新創建該類,並自動還原所有數據成員的值。

2.如何實現對象的序列化及反序列化

要實現對象的序列化,首先要保證該對象可以序列化。而且,序列化只是將對象的屬性進行有效的保存,對於對象的一些方法則無法實現序列化的。
    實現一個類可序列化的最簡便的方法就是增加Serializable屬性標記類。如:
    [Serializable()]
    public class MEABlock
    {
        private int m_ID;
        public string Caption;

        public MEABlock()
        {
            ///構造函數
        }
    }
    即可實現該類的可序列化。注意序列化的類必須為Public,否則不能夠被序列化。

要將該類的實例序列化為到文件中?.Net FrameWork提供了兩種方法:
    a .XML序列化
        使用 XMLSerializer 類,可將下列項序列化。

  • 公共類的公共讀/寫屬性和字段
  • 實現 ICollection 或 IEnumerable 的類。(注意只有集合會被序列化,而公共屬性卻不會。)
  • XMLElement 對象。
  • XMLNode 對象。
  • DataSet 對象。

         要實現上述類的實例的序列化,可參照如下例子:
        MEABlock myBlock = new MEABlock();
        // Insert code to set

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved