Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 儿童引用其父级的复杂类型的反序列化问题_.net_Vb.net_Serialization_Xml Deserialization - Fatal编程技术网

.net 儿童引用其父级的复杂类型的反序列化问题

.net 儿童引用其父级的复杂类型的反序列化问题,.net,vb.net,serialization,xml-deserialization,.net,Vb.net,Serialization,Xml Deserialization,我有一个儿童班。所有child都必须有对我的根对象的引用。在我反序列化我的对象之前,一切都很顺利。当发生反序列化时,反序列化会在我的子对象上执行新的操作,因此即使在调用SetParent之前,该子对象已被新对象替换,并且未调用SetParent。所以在反序列化之后,我的子对象没有一个知道他的父对象。很多应用程序都使用对象根,我不希望所有这些应用程序都调用SetParent 我已在反序列化后查找事件,但未找到任何事件。我已经查看了反射,但还没有找到找到父对象的方法。我已经看到我可以实现ISeria

我有一个儿童班。所有child都必须有对我的根对象的引用。在我反序列化我的对象之前,一切都很顺利。当发生反序列化时,反序列化会在我的子对象上执行新的操作,因此即使在调用SetParent之前,该子对象已被新对象替换,并且未调用SetParent。所以在反序列化之后,我的子对象没有一个知道他的父对象。很多应用程序都使用对象根,我不希望所有这些应用程序都调用SetParent

我已在反序列化后查找事件,但未找到任何事件。我已经查看了反射,但还没有找到找到父对象的方法。我已经看到我可以实现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

除非实现IXmlSerializable并自己完成所有工作,否则无法使用XML序列化来完成此操作


根据您使用的.NET版本,您可以尝试使用,因为它可以处理对同一对象的多个引用。

是否可以在父属性setter中设置父属性

如果父级也是序列化的,则反序列化将调用setter

例:


这正是我需要的!!谢谢
   Public Class Root
       ...
       Public Property a() As Child1  
        Get       
            Return _a     
        End Get
        Set(ByVal value As Child1)      
           _a = value    
           _a.SetParent(Me)
        End Set   
      End Property 
      ...
   End Class