簡體   English   中英

VB.NET反序列化/應該使用哪種模式?

[英]VB.NET deserialization / Which pattern should i use?

我想以對象形式映射給定的XML。 XML包含例如文件路徑之類的值。 典型的路徑由用於文件夾路徑的xml屬性和文件名組成。 該模式應該使我有機會隨時加載和保存對象。 我不想總是手動將文件路徑放在一起或將它們分開。 (我不想更改原始的序列化對象(例如“ katalog”,“ kovkatalog”),因為它是自動生成的。)

我認為繼承可以解決我的問題並提高代碼的可概述性(或者應該使用其他包裝器?)。 有什么不對的方法嗎? 有沒有更好的方法?

反序列化時,始終返回以下錯誤:

“不希望InvalidOperationException: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

XMLFILE:

<?xml version="1.0" encoding="UTF-8"?>
<kov:katalog verfahren="kov" my-version="03000200" katalog-version="1" verfahrens-version="06090000" xmlns:kov="http://example.net/V3.0/Schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</kov:katalog>

這實際上不是繼承問題,而是名稱空間問題。 如果使用相同的名稱空間,它將反序列化

<XmlRoot("katalog", [Namespace]:="http://example.net/V3.0/Schema")>
Partial Public Class unifa_katalog
    Inherits katalog
    Public Sub furtherMethod()
    End Sub
End Class

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM