2011-09-20 52 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启用)倾向于与递归模型混乱爆炸,这使得它们很容易被发现。