我有一个带孩子的课。所有孩子都必须引用我的根对象。一切都很好,直到我反序列化我的对象。当反序列化发生时,反序列化对我的子对象执行 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)