VB.NET - Пользовательская сериализация и циркулярные ссылки, есть ли чистое решение?

Я реализую некоторые пользовательские сериализации (для байтового массива), и столкнулся с проблемой обработки циклических ссылок.

Пример:

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, то я могу справиться с настройкой ссылки MyParent из экземпляра A и даже не записать эту информацию в байтовый буфер для экземпляра. из Б

Это не совсем правильно, но это может быть лучшим решением.

Есть ли более чистый способ справиться с этой ситуацией?

1 ответ

Решение

Вы можете использовать подход, аналогичный стандартному BinaryFormatter из BCL: использовать ObjectIDGenerator и сохранять идентификатор ссылки вместо объекта в случае циклических ссылок

Другие вопросы по тегам