日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Serializable在C#中的作用及其优点

發(fā)布時間:2025/4/9 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Serializable在C#中的作用及其优点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文發(fā)布時間為:2009-10-27 —— 來源于本人的百度文章 [由搬家工具導入]

Serializalbe - Enable the object can be Serialized into a Stream

我理解到的就兩個字: 流、持久存儲

性能就一個字:快

序列化是指將對象實例的狀態(tài)存儲到存儲媒體的過程。在此過程中,先將對象的公共字段和私有字段以及類的名稱(包括類所在的程序集)轉換為字節(jié)流,然后再把字節(jié)流寫入數(shù)據(jù)流。在隨后對對象進行反序列化時,將創(chuàng)建出與原對象完全相同的副本。

在面向對象的環(huán)境中實現(xiàn)序列化機制時,必須在易用性和靈活性之間進行一些權衡。只要您對此過程有足夠的控制能力,就可以使該過程在很大程度上自動進行。例如,簡單的二進制序列化不能滿足需要,或者,由于特定原因需要確定類中那些字段需要序列化。以下各部分將探討 .NET 框架提供的可靠的序列化機制,并著重介紹使您可以根據(jù)需要自定義序列化過程的一些重要功能。

持久存儲
我們經(jīng)常需要將對象的字段值保存到磁盤中,并在以后檢索此數(shù)據(jù)。盡管不使用序列化也能完成這項工作,但這種方法通常很繁瑣而且容易出錯,并且在需要跟蹤對象的層次結構時,會變得越來越復雜。可以想象一下編寫包含大量對象的大型業(yè)務應用程序的情形,程序員不得不為每一個對象編寫代碼,以便將字段和屬性保存至磁盤以及從磁盤還原這些字段和屬性。序列化提供了輕松實現(xiàn)這個目標的快捷方法。

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

當反序列化已序列化的類時,將重新創(chuàng)建該類,并自動還原所有數(shù)據(jù)成員的值。

按值封送
對象僅在創(chuàng)建對象的應用程序域中有效。除非對象是從 MarshalByRefObject 派生得到或標記為 Serializable,否則,任何將對象作為參數(shù)傳遞或將其作為結果返回的嘗試都將失敗。如果對象標記為 Serializable,則該對象將被自動序列化,并從一個應用程序域傳輸至另一個應用程序域,然后進行反序列化,從而在第二個應用程序域中產(chǎn)生出該對象的一個精確副本。此過程通常稱為按值封送。

如果對象是從 MarshalByRefObject 派生得到,則從一個應用程序域傳遞至另一個應用程序域的是對象引用,而不是對象本身。也可以將從 MarshalByRefObject 派生得到的對象標記為 Serializable。遠程使用此對象時,負責進行序列化并已預先配置為 SurrogateSelector 的格式化程序將控制序列化過程,并用一個代理替換所有從 MarshalByRefObject 派生得到的對象。如果沒有預先配置為 SurrogateSelector,序列化體系結構將遵從下面的標準序列化規(guī)則(請參閱序列化過程的步驟)。

基本序列化
要使一個類可序列化,最簡單的方法是使用 Serializable 屬性對它進行標記,如下所示:

[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();
本例使用二進制格式化程序進行序列化。您只需創(chuàng)建一個要使用的流和格式化程序的實例,然后調用格式化程序的 Serialize 方法。流和要序列化的對象實例作為參數(shù)提供給此調用。類中的所有成員變量(甚至標記為 private 的變量)都將被序列化,但這一點在本例中未明確體現(xiàn)出來。在這一點上,二進制序列化不同于只序列化公共字段的 XML 序列化程序。

將對象還原到它以前的狀態(tài)也非常容易。首先,創(chuàng)建格式化程序和流以進行讀取,然后讓格式化程序對對象進行反序列化。以下代碼片段說明了如何進行此操作。

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

// 下面是證明
Console.WriteLine("n1: {0}", obj.n1);
Console.WriteLine("n2: {0}", obj.n2);
Console.WriteLine("str: {0}", obj.str);
上面所使用的 BinaryFormatter 效率很高,能生成非常緊湊的字節(jié)流。所有使用此格式化程序序列化的對象也可使用它進行反序列化,對于序列化將在 .NET 平臺上進行反序列化的對象,此格式化程序無疑是一個理想工具。需要注意的是,對對象進行反序列化時并不調用構造函數(shù)。對反序列化添加這項約束,是出于性能方面的考慮。但是,這違反了對象編寫者通常采用的一些運行時約定,因此,開發(fā)人員在將對象標記為可序列化時,應確保考慮了這一特殊約定。

轉載于:https://www.cnblogs.com/handboy/p/7158362.html

總結

以上是生活随笔為你收集整理的Serializable在C#中的作用及其优点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产午夜精品久久久久 | 汗汗视频 | 国产一区二区三区91 | 亚洲精品三区 | 少妇偷人精品无码人妻 | 一区精品二区国产 | 亚洲 高清 成人 动漫 | 日韩欧美国产另类 | 婷婷五综合 | 999av视频 | 在线天堂www在线国语对白 | 亚洲一区动漫 | 2021亚洲天堂 | 狠狠干一区二区 | 日韩一中文字幕 | 免费在线一级片 | 国产毛片aaa| 午夜生活片 | 天堂网色 | 免费看91的网站 | 一级黄色aa| 国产视频久久久久 | 国产xxxx孕妇 | 韩国三级bd高清中字2021 | 揄拍成人国产精品视频 | 日本特黄一级 | 免费在线观看小视频 | 免费麻豆视频 | 国产原创在线视频 | 人与动物2免费观看完整版电影高清 | 欧美高清日韩 | 少妇裸体挤奶汁奶水视频 | 亚洲欧洲日韩av | 欧美91成人网 | 国产一区欧美一区 | 真实乱偷全部视频 | 国产日韩免费视频 | 搞黄网站在线观看 | 日本成人福利视频 | 天天拍天天射 | 免费在线观看国产精品 | 99爱视频在线观看 | 欧美性生活在线视频 | 日韩av一区在线观看 | 91精品国产高清一区二区三区蜜臀 | 九九热这里有精品 | 欧美精品性视频 | 婷婷精品在线 | 精品福利一区 | 美国三级视频 | 免费成人电影在线观看 | 久久婷婷亚洲 | 国产午夜视频 | 久久久久成人精品 | 六月婷婷在线 | 熟女少妇精品一区二区 | 亚洲免费av一区二区 | 三级一区二区 | 国产二区av| 国产小视频在线看 | 三级爱爱 | 婷婷综合av | 成人国产免费观看 | 超碰成人免费 | www.av成人 | 性活交片大全免费看 | 免费看久久| av图区 | av特黄| 97公开免费视频 | 中文字幕色网 | 久久久精品人妻一区二区三区 | 欧美成人精品一区二区三区 | 日韩视频中文字幕在线观看 | 欧美一区二区三区成人精品 | 欧美极品少妇无套实战 | av波多野吉衣 | 国产综合精品在线 | 三级黄在线观看 | 色牛av| 奶罩不戴乳罩邻居hd播放 | 久久综合亚洲色hezyo国产 | 人妻无码一区二区三区久久 | 高清一区二区三区四区五区 | 欧美精品做受xxx性少妇 | 视频二区 | 国产无套内射又大又猛又粗又爽 | 黄色高清无遮挡 | 中文字幕成人一区 | 国产13页| 亚洲精品国产一区二 | 亚欧在线视频 | 91黄免费| 精品不卡一区 | 天天干天天操天天爽 | 欧美国产成人在线 | 制服师生在线 | 久久久久高清 | 精品九九九九 |