0

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

我想知道二进制序列化,因为这似乎克隆一个对象,无论多么复杂,以一种相当强大的方式。有没有什么办法可以修改这种技术,而不是序列化它,而是返回给定类型T的所有子对象的引用列表?但这只是纯粹的猜测,我愿意接受任何可行的解决方案。

回答

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类型的所有子对象,然后将其编码,以便在反序列化时执行任何所需的任务。展望未来,您只处理序列化的对象。

显然,序列化可能会有复杂性,而且这种方法对于所有情况都不适用。非常不雅的表现也很明智。但我需要一个无障碍的深入的对象图遍历,所以你走了。

相关问题