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類型的所有子對象,然後將其編碼,以便在反序列化時執行任何所需的任務。展望未來,您只處理序列化的對象。

顯然,序列化可能會有複雜性,而且這種方法對於所有情況都不適用。非常不雅的表現也很明智。但我需要一個無障礙的深入的對象圖遍歷,所以你走了。