Ну, я понял метод, хотя он, вероятно, не самый лучший. Поскольку граф моего объекта был довольно вложенным и сложным, я решил положиться на двоичную сериализацию, поскольку, по моему (ограниченному) опыту, он предлагает наиболее полный и надежный обход графа. Недостатком является то, что двоичная сериализация может значительно повлиять на производительность, но после сравнительного анализа она не является ограничивающим фактором для моей конкретной ситуации.
По сути, у меня есть свой тип T, реализующий ISerializable, затем я могу обработать постсериализацию, добавив в класс:
Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo,
ByVal context As System.Runtime.Serialization.StreamingContext)
Другим способом (без реализации Iserializable) является создание постсериализованного метода с атрибутом «OnDeserialized».
В любом случае, вы можете поместить информацию в объект streamingContext, который я использовал для описания операции, которую я хочу выполнить над экземплярами типа T. Таким образом, в основном, сериализуйте родительский объект, который найдет и сериализует все подобъекты типа T, которые затем могут быть закодированы для выполнения любой желаемой задачи при десериализации. В дальнейшем вы будете иметь дело только с сериализованными объектами.
Очевидно, что сериализация может иметь осложнения, и этот метод не будет работать во всех ситуациях. Довольно не элегантная производительность тоже. Но мне нужен был простой и тщательный обход графов объектов, так что все готово.