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

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

淺析.NET中的Serialization

2024-07-15 02:01:26
字體:
來源:轉載
供稿:網友
摘要 本文簡要介紹了.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異常。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华蓥市| 广南县| 大厂| 鸡东县| 邛崃市| 西安市| 社会| 高安市| 洛隆县| 深圳市| 灵山县| 景德镇市| 汤原县| 南乐县| 上林县| 怀化市| 晋江市| 隆德县| 县级市| 农安县| 彝良县| 舞钢市| 娄烦县| 北海市| 许昌县| 南召县| 道孚县| 洛阳市| 怀仁县| 新宁县| 龙陵县| 张家港市| 含山县| 黄骅市| 盐池县| 怀柔区| 辛集市| 德庆县| 克什克腾旗| 蓬莱市| 扶风县|