I've been away for programming for a while and it took me a bit to get used to XML serialization. My first issue was with multiple classes of different types into one file. I has to combine a couple answers together to get the hang of it, though it makes perfect sense now. I thought I would post this for anyone else who might want an example to help understand.
For those who don't a lot of XML experience, proper XML has one root object. This object can be a List(of ...), so if you need to save multiple instances of a single data type or class you can use below...
If you have different data type or classes you will need to create a class that contains them. In the below I create a card class and pet class, put them in lists to save multiple of each them combine those in a single super class that can be output in one XML.Code:Public Sub SaveMany() Dim TheList as New List(Of String) TheList.Add("Apple") TheList.Add("Banana") Dim mydocpath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(List(Of String)) Dim file As New System.IO.StreamWriter(mydocpath + "\Test.xml") writer.Serialize(file, TheList) file.Close() End Sub
the resulting xml isCode:Public Class clsCard Private myRank As String Private mySuit As String Property Rank() As String Get Return myRank End Get Set(value As String) myRank = value End Set End Property Property Suit() As String Get Return mySuit End Get Set(value As String) mySuit = value End Set End Property End Class Public Class clsPet Private myPetName As String Private myPetType As String Private myAge As Int16 Property PetName() As String Get Return myPetName End Get Set(value As String) myPetName = value End Set End Property Property PetType() As String Get Return myPetType End Get Set(value As String) myPetType = value End Set End Property Property Age As Int32 Get Return myAge End Get Set(value As Int32) myAge = value End Set End Property End Class Public Class clsRootForXML Private myRecordDate As Date Private myCardList As List(Of clsCard) Private myPetList As List(Of clsPet) Property RecordDate As Date Get Return myRecordDate End Get Set(value As Date) myRecordDate = value End Set End Property Property CardList As List(Of clsCard) Get Return myCardList End Get Set(value As List(Of clsCard)) myCardList = value End Set End Property Property PetList As List(Of clsPet) Get Return myPetList End Get Set(value As List(Of clsPet)) myPetList = value End Set End Property End Class Public Sub CreateOneXML() Dim card1 As New clsCard Dim card2 As New clsCard Dim card3 As New clsCard Dim theseCards As New List(Of clsCard) card1.Rank = "Ace" card1.Suit = "Spades" card2.Rank = "King" card2.Suit = "Hearts" card3.Rank = "10" card3.Suit = "Diamonds" theseCards.Add(card1) theseCards.Add(card2) theseCards.Add(card3) Dim pet1 As New clsPet Dim pet2 As New clsPet Dim thesePets As New List(Of clsPet) pet1.PetName = "Spot" pet1.PetType = "Dog" pet1.Age = 3 pet2.PetName = "Whiskers" pet2.PetType = "Cat" pet2.Age = 7 thesePets.Add(pet1) thesePets.Add(pet2) Dim oneRootObject As New clsRootForXML oneRootObject.RecordDate = #01/01/2001# oneRootObject.CardList = theseCards oneRootObject.PetList = thesePets Dim mydocpath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) Dim writer As New System.Xml.Serialization.XmlSerializer(GetType(clsRootForXML)) Dim file As New System.IO.StreamWriter(mydocpath + "\Test.xml") writer.Serialize(file, oneRootObject) file.Close() End Sub
Hope this helps.Code:<?xml version="1.0" encoding="utf-8"?> <clsRootForXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <RecordDate>2001-01-01T00:00:00</RecordDate> <CardList> <clsCard> <Rank>Ace</Rank> <Suit>Spades</Suit> </clsCard> <clsCard> <Rank>King</Rank> <Suit>Hearts</Suit> </clsCard> <clsCard> <Rank>10</Rank> <Suit>Diamonds</Suit> </clsCard> </CardList> <PetList> <clsPet> <PetName>Spot</PetName> <PetType>Dog</PetType> <Age>3</Age> </clsPet> <clsPet> <PetName>Whiskers</PetName> <PetType>Cat</PetType> <Age>7</Age> </clsPet> </PetList> </clsRootForXML>




Reply With Quote