Protobuf-net中AsReference选项的存在以及BinaryFormatter是“图形序列化器”这个词使我认为BinaryFormatter不维护引用,并且它会复制每个对象。
但是我做了一些测试,发现即使对于递归引用,单个BinaryFormatter Serialize()或Deserialize()调用中的所有引用都会被维护。
我可以确认BinaryFormatter确实维护引用吗?这与Protobuf-net有何不同?好像我理解“图形序列化”不正确?我还应该注意什么?
提前致谢。
答案 0 :(得分:7)
TL;博士;版本 - BinaryFormatter
始终保留引用。
BinaryFormatter
是“图形序列化程序”的事实与“它保留引用”同义,因为必需来准确地再现图形。替代方案是 树 序列化程序( > <{1>},XmlSerializer
(没有特定选项)已启用),DataContractSerializer
和没有JavascriptSerializer
的protobuf-net都是基于树的)。树序列化器不通常会保留引用(除非它们有一些技巧,例如AsReference
如果启用全图模式,或protobuf-net使用DataContractSerializer
)。树序列化器(没有启用voodoo)倾向于在一个带有递归模型的混乱中爆炸,这使得它们很容易被发现。