Я реализую некоторую пользовательскую сериализацию (к массиву байтов) и столкнулся с проблемой, обрабатывающей циклические ссылки.
Пример:
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
Это не чувствует себя совершенно правильным, но это могло бы быть лучшее решение.
Существует ли более чистый способ обработать эту ситуацию?
Вы можете использовать подход, аналогичный стандартному BinaryFormatter из BCL: используйте ObjectIDGenerator и сохраните идентификатор ссылки вместо объекта в случае циклических ссылок