簡體   English   中英

為什么二進制序列化要求將對象標記為可序列化?

[英]Why does Binary Serialization require the object to be marked as serializable?

我使用的是xml序列化程序,但是當我切換到二進制序列化時,它會引發異常:

運行時錯誤:dotNet運行時異常:在程序集'MyTypes中鍵入'MyTypes.MyObject',Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未標記為可序列化。

為什么它與xml序列化器的不同之處呢?

只是將對象標記為可序列化就足以解決這個問題了嗎? 我不想指定序列化應該如何發生。

XmlSerializer在所有情況下都可以安全使用,因為它只序列化可公開訪問的數據,無論如何該類用戶都可以訪問。

任何運行時格式化程序(包括BinaryFormatter )都會序列化公共和私人可訪問的信息,因此可以讓調用者訪問他們原本不應該擁有的信息。 通過將您的類型標記為[Serializable]您實際上已經考慮到了這一點,並且正在授權任何人查看有關您的類型的序列化信息。

這是一個“默認安全”的選擇,這樣您就不會意外地將敏感數據(如信用卡詳細信息或其他任何內容)序列化到不應該存在的位置(如日志或數據庫)。

BinaryFormatter和xml序列化器之間的根本區別(除了明顯的輸出格式)是二進制序列化保留類型信息(私有/公共屬性,方法,事件等)。 這是此類序列化與遠程處理一起使用的原因之一。 唯一的要求是使用SerializableAttribute修飾類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM