VB.NET-自定义序列化和循环引用,是否有干净的解决方案?
我正在实现一些自定义序列化(到字节数组),在处理循环引用时遇到了问题 例如:VB.NET-自定义序列化和循环引用,是否有干净的解决方案?,.net,vb.net,serialization,infinite-loop,circular-reference,.net,Vb.net,Serialization,Infinite Loop,Circular Reference,我正在实现一些自定义序列化(到字节数组),在处理循环引用时遇到了问题 例如: Class A public MyBs as new List(of B) End class Class B public MyParent as A public MiscInt1 as integer public MiscInt2 as integer End Class 序列化A时,我必须序列化B的每个实例 但是,我在序列化B时遇到了一个问题 如何记录B的父级而不引起无限循环 一个想法:
Class A
public MyBs as new List(of B)
End class
Class B
public MyParent as A
public MiscInt1 as integer
public MiscInt2 as integer
End Class
序列化A时,我必须序列化B的每个实例
但是,我在序列化B时遇到了一个问题
如何记录B的父级而不引起无限循环
一个想法:
如果我知道B的一个实例只能通过A的一个实例的序列化来序列化,那么我可以从A的实例处理MyParent引用的设置,甚至不在B的实例的字节缓冲区中记录该信息
这感觉不太对,但可能是最好的解决方案
有没有更干净的方法来处理这种情况?您可以使用类似于BCL标准BinaryFormatter的方法:在循环引用的情况下,使用并存储引用id而不是对象如何知道在反序列化过程中恢复的引用的类型?您只是根据上下文推断它吗?内置实现存储对象标识符(以及对象实例首次出现时的类型相关信息):(A-1)(列表B-2)(B-3)(参考-1)(10)(20)(B-4)(参考-1)(100)(200)。第一次满足标识符时,存储id和反序列化对象。在该标识符的后面出现时,您将使用现有对象。