VB.NET - 自定义序列化和循环引用,有一个干净的解决方案吗?

时间:2010-08-03 03:05:05

标签: .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的父级?

一个想法:

如果我知道B的实例只能通过序列化A的实例来序列化,那么我可以从A的实例处理MyParent引用的设置,甚至不在字节缓冲区内记录该信息对于B的实例

这感觉不太对,但它可能是最好的解决方案。

是否有更清洁的方法来处理这种情况?

1 个答案:

答案 0 :(得分:2)

你可以使用类似于BCL标准BinaryFormatter的方法:利用ObjectIDGenerator并在循环引用的情况下存储引用id而不是object