trying to serialize and deserialize an xml file using VB.net

前端 未结 1 1851
闹比i
闹比i 2021-01-07 00:54

The xml file should like this after I serialize and then I want to deserialize this in vb.net. I am a begginer in programming. Any help is appreciated.



        
相关标签:
1条回答
  • 2021-01-07 01:28

    I'd advise you to definitely look into XML serialization. A lot of information can be found on MSDN (but also using any search engine). For example on MSDN: Introducing XML Serialization.

    If you have nothing yet, for code. I would keep it very simple to deserialize the given XML structure. You can create a simple class definition for a Country, as shown below:

    Public Class Country
        Public Property CID As Integer
        Public Property CountryName As String
        Public Property States As List(Of String)
    
        Public Sub New()
            States = New List(Of String)()
        End Sub
    End Class
    

    Now this doesn't work yet 100%. You have to help the serialization object with the list of states. You can annotate (with attributes) the States, so the serializer knows that each item is named differently (default it would be <string>item</string>). You can use the XmlArrayItem attribute for this.

    <Serializable()>
    Public Class Country
        Public Property CID As Integer
        Public Property CountryName As String
        <XmlArrayItem("State")>
        Public Property States As List(Of String)
    
        Public Sub New()
            States = New List(Of String)()
        End Sub
    End Class
    

    Finally, for deserialization. I'd deserialize to a List(Of Country), as it clearly is a list. (Assuming the above XML is stored in a file "obj.xml".)

    Dim serializer As New XmlSerializer(GetType(List(Of Country)))
    Dim deserialized As List(Of Country) = Nothing
    Using file = System.IO.File.OpenRead("obj.xml")
        deserialized = DirectCast(serializer.Deserialize(file), List(Of Country))
    End Using
    

    Now we still have to help the serializer object, because otherwise it doesn't know how to deserialize the given XML; as it doesn't determine the root node correctly. We can use an overload of the constructor here, in which we can say what the root node is (XmlSerializer Constructor (Type, XmlRootAttribute)).

    Final code for deserialization would be:

    Dim serializer As New XmlSerializer(GetType(List(Of Country)), New XmlRootAttribute("Countries"))
    Dim deserialized As List(Of Country) = Nothing
    Using file = System.IO.File.OpenRead("obj.xml")
        deserialized = DirectCast(serializer.Deserialize(file), List(Of Country))
    End Using
    

    Code for serialization (writing to file "obj.xml"):

    Dim countries As New List(Of Country)()
    ' Make sure you add the countries to the list
    
    Dim serializer As New XmlSerializer(GetType(List(Of Country)), New XmlRootAttribute("Countries"))
    Using file As System.IO.FileStream = System.IO.File.Open("obj.xml", IO.FileMode.OpenOrCreate, IO.FileAccess.Write)
        serializer.Serialize(file, countries)
    End Using
    

    All this could have been found quite easily by searching and reading the documentation.

    0 讨论(0)
提交回复
热议问题