国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 應用 > 軟件技巧 > 正文

淺析.NET中的Serialization

2024-07-16 17:58:38
字體:
來源:轉載
供稿:網友
摘要 本文簡要介紹了.NET中的序列化(Serialization)概念,以及在代碼中實作Serialization的方法。文章的最后介紹了Serialization在Clone方法中的運用。



Serialization的概念

 

Serialization是.NET中一種實現對象持久性(Persistent)的機制。它是一個將對象中的數據轉換成一個單一元素(通常是Stream)的過程。它的逆過程是Deserialization。Serialization的核心概念是將一個對象的所有數據看作一個獨立的單元。

 

一般說來,在兩種情況下非常需要Serialization:1)當我們希望能夠將對象當前的狀態完整地保存到存儲介質中,以便我們以后能夠精確地還原對象時;2)當我們希望將對象從一個應用程序空間(Application domain)傳遞到另一個應用程序空間時。例如,Windows Form程序就是利用Serialization機制來實現剪貼板的copy & paste的。

 

.net framework支持兩種類型的Serialization:Shallow Serialization和Deep Serialization。

 

所謂Shallow Serialization是將對象的可讀寫(read-write)屬性的值轉換成字節流,而對象內部的數據(沒有通過read-write屬性暴露出來的數據)則不被轉換。XmlSerializer以及Web Services就使用這種技術。

 

Deep Serialization比Shallow Serialization更加徹底,因為它是將存儲在對象私有變量里的實際值拷貝到字節流里。而且Deep Serialization還將serialize整個object graph。也就是說,如果你的對象持有其他對象的引用,或者其他對象引用的集合,那么所有這些對象都將被Serialize。BinaryFormatter和SoapFormatter以及.NET Remoting都使用Deep Serialization技術,它甚至被有限地用于LosFormatter來產生存儲在Web Form頁中的狀態數據。

 

本文將著重于Deep Serialization。



 

Serialization的過程



 

.NET Framework通過Reflection提供自動Serialization的機制。當一個對象被序列化(Serialized)的時候,它的類名,Assembly,以及類實例的所有數據成員都將被寫入存儲介質中。Serialization引擎保持對所有已經被序列化的對象引用的追蹤,以確保相同的對象引用最多只被序列化一次。

 

通常,一個Serialization過程會由formatter(例如BinaryFormatter)的Serialize方法引發。對象的Serialization過程按照以下規則進行:

 

1、 檢測以確保formatter是否擁有一個代理選擇器(surrogate selector)。如果有,檢查代理選擇器是否持有給定的對象類型。如果有,ISerializable.GetObjectData被調用。

 

2、 如果formatter沒有代理選擇器,或者代理選擇器沒有對象類型,檢查對象是否被用Serializable屬性標記。如果沒有,則拋出SerializationException異常。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 辽源市| 淅川县| 陵水| 大竹县| 尤溪县| 湟中县| 长寿区| 长垣县| 枝江市| 稷山县| 沽源县| 安岳县| 紫阳县| 陇川县| 唐山市| 大宁县| 奈曼旗| 邹城市| 兴义市| 邵武市| 柘城县| 平顶山市| 沅江市| 鹤峰县| 库尔勒市| 谢通门县| 屏南县| 蒲城县| 沧源| 张掖市| 文水县| 敦化市| 麻城市| 乃东县| 名山县| 乐昌市| 女性| 元朗区| 财经| 余姚市| 申扎县|