私は子供と一緒にクラスを持っています。すべての子には、ルート オブジェクトへの参照が必要です。オブジェクトを逆シリアル化するまで、すべてがうまくいっています。逆シリアル化が発生すると、逆シリアル化は子オブジェクトに対して New() を実行するため、SetParent が呼び出される前であっても、その子オブジェクトは新しいオブジェクトに置き換えられ、SetParent は呼び出されていません。したがって、逆シリアル化の後、私の子オブジェクトはどれも彼の親を知りません。オブジェクト Root は多くのアプリケーションで使用されており、これらのすべてのアプリケーションで SetParent を呼び出す必要はありません。
イベント AfterDeserialization を探しましたが、何も見つかりませんでした。リフレクションを調べましたが、親オブジェクトを見つける方法が見つかりませんでした。私は ISerializable を実装できることを見てきましたが、すべての逆シリアル化プロセスを管理するのは少し重いと思います (このオブジェクトには約 170 のプロパティがあります)。
ISerializable を実装し、すべてを実行する基本メソッドを呼び出してから、SetParent 関数を呼び出すことはできますか? それとも、自分の研究で見つけられなかったオブジェクトのインスタンスの親をリフレクションで見つける方法はありますか? または、他の提案はありますか?
Public Class Root
Private _a As Child1
Private _b As Child2
Public Property a() As Child1
Get
Return _a
End Get
Set(ByVal value As Child1)
_a = value
End Set
End Property
Public Property b() As Child2
Get
Return _b
End Get
Set(ByVal value As Child2)
_b = value
End Set
End Property
Public Sub New()
a = New Child1
b = New Child2
SetParent()
End Sub
Friend Sub SetParent()
a.SetParent(Me)
b.SetParent(Me)
End Sub
End Class
Public Class Child1
Private _parent As Root
Friend Sub SetParent(ByRef parent As Root)
_parent = parent
End Sub
End Class
Public Class Child2
Private _parent As Root
Private _a As New Child3
Public Property a() As Child3
Get
Return _a
End Get
Set(ByVal value As Child3)
_a = value
End Set
End Property
Friend Sub SetParent(ByRef parent As Root)
a = New Child3
_parent = parent
a.SetParent(parent)
End Sub
End Class
Public Class Child3
Private _parent As Root
Friend Sub SetParent(ByRef parent As Root)
_parent = parent
End Sub
End Class
ご協力いただきありがとうございます!:o)