Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
VB.NET反序列化/我应该使用哪种模式?_Vb.net_Design Patterns_Serialization - Fatal编程技术网

VB.NET反序列化/我应该使用哪种模式?

VB.NET反序列化/我应该使用哪种模式?,vb.net,design-patterns,serialization,Vb.net,Design Patterns,Serialization,我想以对象形式映射给定的XML。XML包括例如值​​像一个文件路径。典型的路径由文件夹路径的xml属性和文件名组成。该模式应使我有机会随时加载和保存对象。我不想总是手动将文件路径放在一起或将它们分开。(我不想更改原始序列化对象(如“katalog”、“kovkatalog”),因为它是自动生成的。) 我认为继承可以解决我的问题,提高代码的可浏览性(或者应该使用其他包装器?)。有什么东西反对这种做法吗?有没有更好的办法 反序列化时,始终返回以下错误: “无效操作例外:http://example.

我想以对象形式映射给定的XML。XML包括例如值​​像一个文件路径。典型的路径由文件夹路径的xml属性和文件名组成。该模式应使我有机会随时加载和保存对象。我不想总是手动将文件路径放在一起或将它们分开。(我不想更改原始序列化对象(如“katalog”、“kovkatalog”),因为它是自动生成的。)

我认为继承可以解决我的问题,提高代码的可浏览性(或者应该使用其他包装器?)。有什么东西反对这种做法吗?有没有更好的办法

反序列化时,始终返回以下错误:

“无效操作例外:http://example.net/V3.0/Schema“>是不可能的。”

有没有人能解决我如何用其他方法扩展继承的问题

VB.NET-CODE:

Namespace abc
    Public Class Main
        Public Sub New()
            Dim des As New unifa_katalog
            des = Deserialisieren(Of unifa_katalog)("<PATH_TO_FILE>\katalog.xml")
        End Sub

        Private Function Deserialisieren(Of T)(strSpeicherOrt As String) As T
            Dim serializer As New XmlSerializer(GetType(T))
            Dim deserialized As T = Nothing
            Using file = System.IO.File.OpenRead(strSpeicherOrt)
                deserialized = DirectCast(serializer.Deserialize(file), T)
            End Using
            Return deserialized
        End Function
    End Class

    <XmlRoot("katalog", [Namespace]:="urn:kosxmlns")>
    Partial Public Class unifa_katalog
        Inherits katalog
        Public Sub furtherMethod()

        End Sub

    End Class


    <System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432"),
     System.SerializableAttribute(),
     System.Diagnostics.DebuggerStepThroughAttribute(),
     System.ComponentModel.DesignerCategoryAttribute("code"),
     System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True, [Namespace]:="http://example.net/V3.0/Schema"),
     System.Xml.Serialization.XmlRootAttribute([Namespace]:="http://example.net/V3.0/Schema", IsNullable:=False)>
    Partial Public Class katalog
        Inherits kovkatalog
    End Class
    Partial Public Class kovkatalog

        Private verfahrenField As String
        Private verfahrensversionField As String
        Private katalogversionField As Integer
        Private myversionField As String

        Public Sub New()
            MyBase.New
            Me.katalogversionField = 1
        End Sub


        '''<remarks/>
        <System.Xml.Serialization.XmlAttributeAttribute()>
        Public Property verfahren() As String
            Get
                Return Me.verfahrenField
            End Get
            Set
                Me.verfahrenField = Value
            End Set
        End Property

        '''<remarks/>
        <System.Xml.Serialization.XmlAttributeAttribute("verfahrens-version")>
        Public Property verfahrensversion() As String
            Get
                Return Me.verfahrensversionField
            End Get
            Set
                Me.verfahrensversionField = Value
            End Set
        End Property

        '''<remarks/>
        <System.Xml.Serialization.XmlAttributeAttribute("katalog-version"),
         System.ComponentModel.DefaultValueAttribute(1)>
        Public Property katalogversion() As Integer
            Get
                Return Me.katalogversionField
            End Get
            Set
                Me.katalogversionField = Value
            End Set
        End Property

        '''<remarks/>
        <System.Xml.Serialization.XmlAttributeAttribute("my-version")>
        Public Property myversion() As String
            Get
                Return Me.myversionField
            End Get
            Set
                Me.myversionField = Value
            End Set
        End Property
    End Class
End Namespace
abc名称空间
公共班机
公共分新()
Dim des As New unifa_katalog
des=反序列化(unifa_katalog的)(“\katalog.xml”)
端接头
私有函数反序列化(Of T)(strSpeicherOrt作为字符串)作为T
Dim序列化程序作为新的XmlSerializer(GetType(T))
Dim反序列化为T=Nothing
使用file=System.IO.file.OpenRead(strSpeicherOrt)
反序列化=DirectCast(序列化程序.反序列化(文件),T)
终端使用
返回反序列化
端函数
末级
部分公共类unifa_katalog
继承卡塔洛
公共子方法()
端接头
末级
部分公共类卡塔洛
继承科瓦卡塔洛格
末级
部分公共类kovkatalog
私有verfahrenField作为字符串
私有verfahrensversionField作为字符串
私有katalogversionField为整数
私有myversionField作为字符串
公共分新()
我的基地,新的
Me.katalogversionField=1
端接头
'''
公共属性verfahren()作为字符串
得到
还我,费尔法伦菲尔德
结束
设置
Me.verfahrenField=值
端集
端属性
'''
公共属性verfahrensversion()作为字符串
得到
返回我。verfahrensversionField
结束
设置
Me.verfahrensversionField=值
端集
端属性
'''
公共属性katalogversion()为整数
得到
把katalogversionField还给我
结束
设置
Me.katalogversionField=值
端集
端属性
'''
公共属性myversion()作为字符串
得到
返回我。myversionField
结束
设置
Me.myversionField=值
端集
端属性
末级
结束命名空间
XML文件:


这不是一个真正的继承问题,而是一个名称空间问题。如果使用相同的命名空间,它将反序列化


部分公共类unifa_katalog
继承卡塔洛
公共子方法()
端接头
末级