好吧,我想出了一个方法,尽管它可能不是最好的。因为我的对象的图非常嵌套和复杂,所以我决定依赖二进制序列化,因为在我(有限的)经验中,它提供了最彻底和健壮的图遍历。缺点是二进制序列化会显着影响性能,但在基准测试之后,它似乎不是我特定情况的限制因素。
基本上,我有我的类型 T 实现 ISerializable,然后我可以通过添加到类来处理后序列化:
Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo,
ByVal context As System.Runtime.Serialization.StreamingContext)
另一种方法(不实现 Iserializable)是使用“OnDeserialized”属性创建一个后序列化方法。
无论如何,您可以将信息放入 streamingContext 对象中,我用它来描述我想在 Type T 实例上执行的操作。所以基本上,序列化父对象,它将找到并序列化所有类型 T 的子对象,然后可以对其进行编码以在反序列化时执行任何所需的任务。接下来,您将只处理序列化的对象。
显然,序列化可能有复杂性,而且这种方法并不适用于所有情况。在性能方面也很不优雅。但是我需要一个无忧且彻底的对象图遍历,所以你去吧。