序列化和反序列化

2021-06-21 13:50:04 字數 1256 閱讀 4305

概述

當兩個程序在進行遠端通訊時,彼此可以傳送各種型別的資料。無論是何種型別的資料,都會以二進位制序列的形式在網路上傳送。傳送方需要把這個物件轉換為位元組序列,才能在網路上傳送;接收方則需要把位元組序列再恢復為物件。

把物件轉換為位元組序列的過程稱為物件的序列化。

把位元組序列恢復為物件的過程稱為物件的反序列化。

物件的序列化主要有兩種用途

1)把物件的位元組序列永久地儲存到硬碟上,通常存放在乙個檔案中;

我們經常需要將物件的字段值儲存到磁碟中,並在以後檢索此資料。儘管不使用序列化也能完成這項工作,但這種方法通常很繁瑣而且容易出錯,並且在需要跟蹤物件的層次結構時,會變得越來越複雜。可以想象一下編寫包含大量物件的大型業務應用程式的情形,程式設計師不得不為每乙個物件編寫**,以便將字段和屬性儲存至磁碟以及從磁碟還原這些欄位和屬性。序列化提供了輕鬆實現這個目標的快捷方法。公共語言執行時(clr) 管理物件在記憶體中的分布,.net 框架則通過使用反射提供自動的序列化機制。物件序列化後,類的名稱、程式集以及類例項的所有資料成員均被寫入儲存**中。物件通常用成員變數來儲存對其他例項的引用。類序列化後,序列化引擎將跟蹤所有已序列化的引用物件,以確保同一物件不被序列化多次。.net 框架所提供的序列化體系結構可以自動正確處理物件圖表和迴圈引用。對物件圖表的唯一要求是,由正在進行序列化的物件所引用的所有物件都必須標記為serializable(請參閱基本序列化)。否則,當序列化程式試圖序列化未標記的物件時將會出現異常。當反序列化已序列化的類時,將重新建立該類,並自動還原所有資料成員的值。

2)在網路上傳送物件的位元組序列。

物件僅在建立物件的應用程式域中有效。除非物件是從marshalbyrefobject派生得到或標記為serializable,否則,任何將物件作為引數傳遞或將其作為結果返回的嘗試都將失敗。如果物件標記為serializable,則該物件將被自動序列化,並從乙個應用程式域傳輸至另乙個應用程式域,然後進行反序列化,從而在第二個應用程式域中產生出該物件的乙個精確副本。此過程通常稱為按值封送。如果物件是從marshalbyrefobject派生得到,則從乙個應用程式域傳遞至另乙個應用程式域的是物件引用,而不是物件本身。也可以將從marshalbyrefobject派生得到的物件標記為serializable。遠端使用此物件時,負責進行序列化並已預先配置為surrogateselector的格式化程式將控制序列化過程,並用乙個**替換所有從marshalbyrefobject派生得到的物件。如果沒有預先配置為surrogateselector,序列化體系結構將遵從下面的標準序列化規則。

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...

序列化和反序列化

先定義乙個類 serializable xmlroot shintech public class person set public string name set public person this 0,string.empty public person int m age,string m...

序列化和反序列化

引文來自 序列化和反序列化我們可能經常會聽到,其實通俗一點的解釋,序列化就是把乙個物件儲存到乙個檔案或資料庫欄位中去,反序列化就是在適當的時候把這個檔案再轉化成原來的物件使用。using system using system.collections using system.text namesp...