1、序列化定義:將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然後使用 HTTP 通過 Internet 在用戶端和伺服器之間傳輸該對象。反之,還原序列化根據流重新構造對象。
在此過程中,先將對象的公用欄位和私人欄位以及類的名稱(包括類所在的程式集)轉換為位元組流,然後再把位元組流寫入資料流。在隨後對對象進行還原序列化時,將建立出與原對象完全相同的副本
2、使用序列化的原因:將對象的狀態儲存在儲存媒體中以便可以在以後重新建立出完全相同的副本;按值將對象從一個應用程式定義域發送至另一個應用程式定義域。例如,序列化可用於在 ASP.NET 中儲存工作階段狀態,以及將對象複製到 Windows 表單的剪貼簿中。它還可用於按值將對象從一個應用程式定義域遠程傳遞至另一個應用程式定義域。本文簡要介紹了 Microsoft .NET 中使用的序列化。
3、基本序列化
[Serializable]
public class MyObject {
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
以下程式碼片段說明了如何將此類的一個執行個體序列化為一個檔案:
MyObject obj = new MyObject();
obj.n1 = 1;
obj.n2 = 24;
obj.str = "一些字串";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
4、五.選擇性序列化
類通常包含不應被序列化的欄位。例如,假設某個類用一個成員變數來儲存線程 ID。當此類被還原序列化時,序列化此類時所儲存的 ID 對應的線程可能不再運行,所以對這個值進行序列化沒有意義。可以通過使用 NonSerialized 屬性標記成員變數來防止它們被序列化,如下所示:
[Serializable]
public class MyObject
{
public int n1;
[NonSerialized]
public int n2;
public String str;
}
C# 序號與還原序列化總結
1、 C# 序列化與還原序列化
2、C# Serializable對象序列化的作用 (此文)
參考:http://www.cnblogs.com/winner/archive/2008/03/25/1120757.html