2011-09-20 49 views
8

Protobuf-net中的AsReference選項的存在以及BinaryFormatter是「圖形序列化程序」的詞使我認爲BinaryFormatter不保留引用,並且它會複製每個對象。BinaryFormatter中的引用完整性

但我做了一些測試,發現即使對於遞歸引用,單個BinaryFormatter的Serialize()或Deserialize()調用中的所有引用也會保留。

我可以確認BinaryFormatter的確保持參考嗎?這與Protobuf-net有何不同?似乎我理解「圖形序列化」不正確?我還應該注意些什麼?

在此先感謝。

回答

7

tl; dr;版本 - BinaryFormatter始終保留參考。

BinaryFormatter是「圖形串化器」的事實與「它保留參考」是同義詞,因爲需要才能準確地重現圖形。另一種選擇是一個串行器(這是最他們的; XmlSerializerDataContractSerializer(無特定的選項),JavascriptSerializer和protobuf網不AsReference都是基於樹)。 Tree序列化程序做而不是通常保留參考(除非它們使用一些技巧,即如果啓用全圖模式,或者protobuf-net使用AsReferenceDataContractSerializer會執行什麼操作)。 Tree序列化程序(無Voodoo啓用)傾向於與遞歸模型混亂爆炸,這使得它們很容易被發現。