0

(使用 vb.Net 4.0)假设您有一个对象,其图形相当复杂 - 它具有属性、数组和其他集合、具有自己的属性和集合的子类等。我想完全遍历整个对象图并找到所有实例特定类型 T,然后对这些实例执行特定操作。是否有一种防弹的方法来执行对象图的完整遍历?即使有反思,这似乎也是一项容易出错的艰巨任务。

我想知道二进制序列化,因为这似乎以相当健壮的方式克隆了一个对象,无论多么复杂。有什么方法可以修改该技术,而不是将其序列化,而是返回对给定类型 T 的所有子对象的引用列表?但这只是纯粹的猜测,我对任何可行的解决方案持开放态度。

4

1 回答 1

0

好吧,我想出了一个方法,尽管它可能不是最好的。因为我的对象的图非常嵌套和复杂,所以我决定依赖二进制序列化,因为在我(有限的)经验中,它提供了最彻底和健壮的图遍历。缺点是二进制序列化会显着影响性能,但在基准测试之后,它似乎不是我特定情况的限制因素。

基本上,我有我的类型 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 的子对象,然后可以对其进行编码以在反序列化时执行任何所需的任务。接下来,您将只处理序列化的对象。

显然,序列化可能有复杂性,而且这种方法并不适用于所有情况。在性能方面也很不优雅。但是我需要一个无忧且彻底的对象图遍历,所以你去吧。

于 2012-01-20T21:48:16.410 回答