什么是序列化以及如何實(shí)現(xiàn)序列化,?
序列化是通過將對象轉(zhuǎn)換為字節(jié)流,從而存儲對象或?qū)ο髠鬏數(shù)絻?nèi)存,,數(shù)據(jù)庫或文件的過程,。主要用途是保存對象的狀態(tài),,包括對象的數(shù)據(jù),以便能夠在需要是重建對象,。反向過程稱為 反序列化,。
序列化是通過將對象轉(zhuǎn)換為字節(jié)流,從而存儲對象或?qū)ο髠鬏數(shù)絻?nèi)存,,數(shù)據(jù)庫或文件的過程,。主要用途是保存對象的狀態(tài),,包括對象的數(shù)據(jù),以便能夠在需要是重建對象,。反向過程稱為 反序列化,。
如上圖所示,對象 object 被序列化為 流,,其中不僅包含數(shù)據(jù),、還包含對象類型的相關(guān)信息,如版本,、區(qū)域性和程序集名稱,。然后可以將此流中的內(nèi)容存儲到數(shù)據(jù)庫、文件或內(nèi)存中,。
通過序列化,,可以執(zhí)行如下操作:通過 Web 服務(wù)將對象發(fā)送到遠(yuǎn)程應(yīng)用程序、在域之間傳遞對象,、以 XML 字符串的形式傳遞對象通過防火墻,、跨應(yīng)用程序維護(hù)安全性或用戶專屬信息。
需要具有對象,、包含已序列化對象的一個(gè)流,,以及一個(gè) Fromatter,。
System.Runtime.Serialization 包含序列化和反序列化對象所必須的類,。
將 SerializableAttribute 特性應(yīng)用于某個(gè)類型,以表示此類型的實(shí)例可以被序列化,,如果對沒有 SerializableAttribute 特性的類型進(jìn)行序列化,,則會引發(fā)異常。
如果想讓類中的某個(gè)字段不可序列化,,可以使用 NonSerializedAttribute 特性,。
可以使用二進(jìn)制 binary 或 XML 進(jìn)行序列化,,在 二進(jìn)制序列化中,所有內(nèi)容都會被序列化,,且性能也很好,,使用二進(jìn)制編碼來生成精簡的序列化,可以用于基于存儲或socket的網(wǎng)絡(luò)流,。
XML 序列化可提高可讀性,,以及對象共享和使用的靈活性,XML 序列化將對象的公共字段和屬性或方法的參數(shù)和返回值序列化成符合特定 XML 格式的流,,
System.Xml.Serialization 包含序列化和反序列化 XML 所需要的類