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

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

Пример:

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

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

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

1 Ответ

2 голосов
/ 03 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...