자식이있는 클래스가 있습니다. 모든 하위 항목에는 내 루트 객체에 대한 참조가 있어야합니다. 내가 물건을 비 직렬화 할 때까지 모든 것이 잘되고있다. deserialization이 발생하면 Deserialization은 자식 객체에서 New()를 수행하므로 SetParent가 호출되기 전에 자식 객체가 새 객체로 대체되고 SetParent가 호출되지 않은 경우에도 마찬가지입니다. 그래서 Deserialization 후, 내 자식 개체 중 누구도 그의 부모를 알지 못합니다. 개체 루트는 많은 응용 프로그램에서 사용하고 있으며 모든 응용 프로그램이 SetParent를 호출하는 것을 원하지 않습니다.자식이 자신의 부모를 참조하는 복잡한 형식의 비 직렬화 문제
나는 이벤트에 대한보고했습니다 AfterDeserialization 그러나 어떤을 발견하지 않았습니다. 리플렉션을 통해 살펴본 결과 부모 개체를 찾는 방법을 찾지 못했습니다. 나는 ISerializable을 구현할 수있는 것을 보았지만, 모든 deserialization 프로세스를 관리하기에는 무거웠다. (나는이 객체에서 약 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
도움 주셔서 감사합니다. : 당신이 자신을 IXmlSerializable
를 구현하고 모든 일을하지 않는 O)
이 내가 필요 정확히입니다! 감사!! –