0

(vb.Net 4.0を使用)グラフはかなり複雑です - プロパティ、配列、その他のコレクション、独自のプロパティとコレクションを持つサブクラスなどがあります。私はオブジェクトグラフ全体を完全に横断し、特定のタイプTのすべてのインスタンスを見つけて、これらのインスタンスに対して特定の操作を実行したいと考えています。オブジェクトグラフのフルトラバーサルを実行するための防弾方法はありますか?反射でさえ、これはエラーが発生しやすい難しい作業のようです。複雑なオブジェクトグラフ内のすべての型インスタンスをトラバースして見つける

私はバイナリのシリアライゼーションについて疑問を抱いていました。それは、オブジェクトがどれほど複雑であっても、かなり堅牢な方法で複製するように見えるからです。そのテクニックを変更する方法はありますか?その代わりに、それをシリアル化する代わりに、指定されたタイプTのすべてのサブオブジェクトへの参照リストを返します。しかし、それは単なる純粋な推測です、私は実現可能な解決策に開放されています。

答えて

0

私は方法を考え出しましたが、それはおそらく最良ではありません。私のオブジェクトのグラフはかなり複雑なので、&複合体であるため、私の(限られた)経験では最も徹底的なグラフトラバーサル&を提供するので、私はバイナリ直列化に頼ることにしました。欠点は、バイナリのシリアライゼーションがパフォーマンスに大きな影響を与える可能性があることですが、ベンチマーク後には、特定の状況の制限要因ではないようです。

は基本的に、私は私のタイプのTは、ISerializableを実装し、その後、私はクラスに追加することで、ポストシリアライズを扱うことができる持っている:(Iserializableを実装せず)

Protected Sub New(ByVal info As System.Runtime.Serialization.SerializationInfo, 
          ByVal context As System.Runtime.Serialization.StreamingContext) 

別の方法で後シリアル化されたメソッドを作成しています"OnDeserialized"属性。

とにかく、私はtypeTインスタンスで実行したい操作を記述するために使用したstreamingContextオブジェクトに情報を入れることができます。したがって、基本的に、親オブジェクトを直列化します。これは、T型のすべてのサブオブジェクトを見つけてシリアル化し、非直列化時に任意のタスクを実行するようにコーディングできます。次に、シリアライズされたオブジェクトのみを処理します。

明らかに、シリアライゼーションには問題があり、この方法はすべての状況で機能しません。パフォーマンスも賢明ではありません。しかし、私は面倒なフリーの&オブジェクトグラフの通過を徹底する必要がありました。

関連する問題