У меня есть класс с детьми. Все дочерние элементы должны иметь ссылку на мой корневой объект. Все идет хорошо, пока я не десериализую свой объект. Когда происходит десериализация, десериализация выполняет 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
Спасибо за вашу помощь! : О)