序列化基本概念

原文來源:http://blog.sina.com.cn/s/blog_49f485700100gfsl.html

 

當兩個進程在進行遠程通信時,彼此可以發送各種類型的數據。無論是何種類型的數據,都會以二進制序列的形式在網絡上傳送。發送方需要把這個對象轉換爲字節序列,才能在網絡上傳送;接收方則需要把字節序列再恢復爲對象。
把對象轉換爲字節序列的過程稱爲對象的序列化
把字節序列恢復爲對象的過程稱爲對象的反序列化。

二、對象的序列化主要有兩種用途:
1) 把對象的字節序列永久地保存到硬盤上,通常存放在一個文件中;
2)在網絡上傳送對象的字節序列。

三、.NET提供了三種序列化方式
[1]、XML Serializer
[2]、SOAP Serializer
[3]、BinarySerializer

四、基本序列化
要使一個類可序列化,最簡單的方法是使用 Serializable 屬性對它進行標記,如下所示:
[Serializable]
public class MyObject
{
public int n1 = 0;
public int n2 = 0;
public String str = null;
}
[BinarySerializer]
將此類的一個實例序列化爲一個文件:
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();

反序列化:

IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Open,
FileAccess.Read, FileShare.Read);
MyObject obj = (MyObject) formatter.Deserialize(fromStream);
stream.Close();

[XMLSerializer]
將此類的實例序列化成一個Xml文件.

XmlSerializer ser = new XmlSerializer(obj.GetType());
ser.Serialize(new FileStream(@"users.xml", FileMode.Create), obj);

反序列化:

XmlSerializer serializer = new XmlSerializer(Type.GetType("MyObject"));
MyObject my=(MyObject)serializer.Deserialize(new FileStream(@"users.xml",FileMode.Open));

說明:使用二進制格式化程序進行序列化。您只需創建一個要使用的流和格式化程序的實例,然後調用格式化程序的 Serialize 方法。流和要序列化的對象實例作爲參數提供給此調用。類中的所有成員變量(甚至標記爲 private 的變量)都將被序列化,但這一點在本例中未明確體現出來。在這一點上,二進制序列化不同於只序列化公共字段的 XML 序列化程序。將對象還原到它以前的狀態也非常容易。首先,創建格式化程序和流以進行讀取,然後讓格式化程序對對象進行反序列化。
[SOAP Serializer]
如果要求具有可移植性,請使用 SoapFormatter。所要做的更改只是將以上代碼中的BinaryFormatter換 SoapFormatter,而 Serialize 和 Deserialize 調用不變。

 

發佈了22 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章