為什麼要序列化,如何序列化和反序列化?

2021-09-25 04:40:52 字數 1103 閱讀 6411

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

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

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

說的再直接點,序列化的目的就是為了跨程序傳遞格式化資料

乙個原因是將物件的狀態保持在儲存**中,以便可以在以後重新建立精確的副本。

我們經常需要將物件的字段值儲存到磁碟中,並在以後檢索此資料。儘管不使用序列化也能完成這項工作,但這種方法通常很繁瑣而且容易出錯,並且在需要跟蹤物件的層次結構時,會變得越來越複雜。可以想象一下編寫包含大量物件的大型業務應用程式的情形,程式設計師不得不為每乙個物件編寫**,以便將字段和屬性儲存至磁碟以及從磁碟還原這些欄位和屬性。序列化提供了輕鬆實現這個目標的快捷方法。

b.另乙個原因是通過值將物件從乙個應用程式域傳送到另乙個應用程式域中。  

例如,序列化可用於在 asp.net 中儲存會話狀態並將物件複製到 windows 窗體的剪貼簿中。遠端處理還可以使用序列化通過值將物件從乙個應用程式域傳遞到另乙個應用程式域中。

公共語言執行時 (clr) 管理物件在記憶體中的分布,.net 框架則通過使用反射提供自動的序列化機制。物件序列化後,類的名稱、程式集以及類例項的所有資料成員均被寫入儲存**中。物件通常用成員變數來儲存對其他例項的引用。類序列化後,序列化引擎將跟蹤所有已序列化的引用物件,以確保同一物件不被序列化多次。.net 框架所提供的序列化體系結構可以自動正確處理物件圖表和迴圈引用。對物件圖表的唯一要求是,由正在進行序列化的物件所引用的所有物件都必須標記為 serializable(請參閱基本序列化)。否則,當序列化程式試圖序列化未標記的物件時將會出現異常。

當反序列化已序列化的類時,將重新建立該類,並自動還原所有資料成員的值。

主要用於儲存物件狀態為另一種通用格式,比如儲存為二進位制、xml、json等等,把物件轉換成這種格式就叫序列化,而反序列化通常是從這種格式轉換回來。

使用序列化主要是因為跨平台和物件儲存的需求,因為網路上只允許字串或者二進位制格式,而檔案需要使用二進位製流格式,如果想把乙個記憶體中的物件儲存下來就必須使用序列化轉換為xml(字串)、json(字串)或二進位制(流)

序列化和反序列化 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...