BinaryFormatter中的引用完整性

时间:2011-09-20 01:27:05

标签: c# reference protobuf-net binaryformatter

Protobuf-net中AsReference选项的存在以及BinaryFormatter是“图形序列化器”这个词使我认为BinaryFormatter不维护引用,并且它会复制每个对象。

但是我做了一些测试,发现即使对于递归引用,单个BinaryFormatter Serialize()或Deserialize()调用中的所有引用都会被维护。

我可以确认BinaryFormatter确实维护引用吗?这与Protobuf-net有何不同?好像我理解“图形序列化”不正确?我还应该注意什么?

提前致谢。

1 个答案:

答案 0 :(得分:7)

TL;博士;版本 - BinaryFormatter始终保留引用。

BinaryFormatter是“图形序列化程序”的事实与“它保留引用”同义,因为必需来准确地再现图形。替代方案是 序列化程序( > <{1>},XmlSerializer(没有特定选项)已启用),DataContractSerializer和没有JavascriptSerializer的protobuf-net都是基于树的)。树序列化器通常会保留引用(除非它们有一些技巧,例如AsReference如果启用全图模式,或protobuf-net使用DataContractSerializer)。树序列化器(没有启用voodoo)倾向于在一个带有递归模型的混乱中爆炸,这使得它们很容易被发现。