|
|
| Auteur |
Bericht |
Vic
|
|
Onderwerp: XML Object Serialize
Geplaatst: 09 mrt 2010 - 19:29
|
|
In draf
Geregistreerd op: 11-mrt-2006
Berichten: 301
Status: Offline
|
|
Bij wijze van test, wil ik een verzameling objecten van het volgende class te serialiseren naar XML
Visual Basic code: <XmlRootAttribute(ElementName:="Boek")> _ Public Class clsBook Public Name As String Public Description As String <XmlElementAttribute(ElementName:="Quantity")> _ Public Qty As Integer End Class
Voor de eenvoudigheid heb ik enkel public members en geen properties
Via volgende code maak ik de Xml file aan,
Visual Basic code: Dim LstBook As New List(Of clsBook) Dim b As New clsBook() b.Name = "Boek1" b.Description = "Boek Description 1" b.Qty = 5 LstBook.Add(b) b = New clsBook b.Name = "Boek2" b.Description = "Product Description 2" b.Qty = 105 LstBook.Add(b) Dim objStreamWriter As New StreamWriter("D:\Test.Xml") Dim x As New XmlSerializer(LstBook.GetType) x.Serialize(objStreamWriter, LstBook) objStreamWriter.Close()
Dit levert volgende Xml file op,
Code: <?xml version="1.0" encoding="utf-8"?>
<ArrayOfClsBook xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<clsBook>
<Name>Boek1</Name>
<Description>Boek Description 1</Description>
<Quantity>5</Quantity>
</clsBook>
<clsBook>
<Name>Boek2</Name>
<Description>Product Description 2</Description>
<Quantity>105</Quantity>
</clsBook>
</ArrayOfClsBook>
Al hoewel dat dit werkt, zou ik graag ArrayOfClsBook en clsBook willen vervangen door een eigen aanduiding, maar kan daarvoor niet de nodige attribut vinden. Kan iemand me helpen?
Mocht er iemand zijn die vindt dat dit beter op een andere wijze kan of eenvoudiger kan mag die dat natuurlijk ook melden.
Mvg, Vic |
|
|
| |
|
|
|
 |
doebi
|
|
Onderwerp: Re: XML Object Serialize
Geplaatst: 09 mrt 2010 - 19:52
|
|
In draf

Geregistreerd op: 12-mrt-2006
Berichten: 331
Woonplaats: Diksmuide
Status: Offline
|
|
Voor het ArrayOfClsBook weet ik het zo niet, voor clsBook kan je misschien een eigen classe maken met de naam van keuze waarin
je de originele clsBook volledig overerft, ik weet we niet of die overerfbaar is.
Verder kan je de xml als tekstbestand behandelen en zo lijn voor lijn eruitfilteren wat je wil veranderen,
maar dat is waarschijnlijk je bedoeling niet, of toch ? |
_________________ Verwacht het onverwachte
|
| |
|
|
|
 |
Vic
|
|
Onderwerp: Re: XML Object Serialize
Geplaatst: 10 mrt 2010 - 08:18
|
|
In draf
Geregistreerd op: 11-mrt-2006
Berichten: 301
Status: Offline
|
|
Thx voor de replay.
Voor wat betreft clsBook lukt dat met, zoals hierboven aangegeven met de attribuut <XlmRootAttribute> wel als je enkel 1 object serialiseert en dus geen List (Of) gebruikt. Dus direct dat ene object serialiseren. Nu ik zoek vandaag nog wel even verder. Echt zo belangrijk is dat nu voor deze toepassing ook weer niet hoor. Het was meer om het te weten hoe je zoiets kan oplossen.
De bedoeling is om op die wijze de state van een aantal objecten te kunnen opslaan om ze nadien door men programma terug te kunnen laten inlezen en om op dat moment terug te kunnen gebruiken.
Mvg, Vic |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: XML Object Serialize
Geplaatst: 10 mrt 2010 - 10:20
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
Quote: De bedoeling is om op die wijze de state van een aantal objecten te kunnen opslaan om ze nadien door men programma terug te kunnen laten inlezen en om op dat moment terug te kunnen gebruiken.
Dan kan je ze toch gewoon terug serializen van xml naar objecten.
Visual Basic code: Class TheClass Public i As Integer End Class
Sub WriteXml() Dim writeList As New List(Of TheClass) For i As Integer = 0 To 4 Dim tc As New TheClass tc.i = i writeList.Add(tc) Next
Dim objStreamWriter As New IO.StreamWriter("C:\Test.Xml") Dim serializer As New XmlSerializer(GetType(List(Of TheClass))) serializer.Serialize(objStreamWriter, writeList) objStreamWriter.Close() End Sub
Sub ReadXml() Dim objStreamReader As New IO.StreamReader("c:\test.xml") Dim serializer As New XmlSerializer(GetType(List(Of TheClass))) Dim readList As List(Of TheClass) = DirectCast(serializer.Deserialize(objStreamReader), List(Of TheClass)) objStreamReader.Close() For Each tc As TheClass In readList MsgBox(tc.i) Next End Sub
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
Vic
|
|
Onderwerp: Re: XML Object Serialize
Geplaatst: 10 mrt 2010 - 10:40
|
|
In draf
Geregistreerd op: 11-mrt-2006
Berichten: 301
Status: Offline
|
|
Ja dat is geen probleem hoor.
De vraag was enkel of je in het Xml document waar per default de Class namen vermeld worden, dus in bovenstand voorbeeld ArrayOfClsBook en clsBook of het mogelijk is daar andere namen te laten vermelden.
Mvg, Vic |
|
|
| |
|
|
|
 |
Vozzie
|
|
Onderwerp: Re: XML Object Serialize
Geplaatst: 10 mrt 2010 - 10:49
|
|
Moderator

Geregistreerd op: 11-mei-2009
Berichten: 937
Status: Offline
|
|
Hallo,
Deze code Visual Basic code: Option Explicit On Option Strict On
Imports System.Xml.Serialization
<Serializable(), XmlRoot(ElementName:="Boeken")> _ Public Class clsBooks <XmlElement(ElementName:="Boek")> _ Public list As New List(Of clsBook) End Class
Public Class clsBook Public Name As String Public Description As String <XmlElement(ElementName:="Quantity")> _ Public Qty As Integer End Class
Public Module Module1
Sub Main()
Dim books As New clsBooks For i As Integer = 1 To 3 Dim book As New clsBook book.Name = "VB.Net part " & i.ToString() book.Description = "Learning vb.net" book.Qty = (4 - i) * 333 books.list.Add(book) Next
Dim objStreamWriter As New IO.StreamWriter("c:\Test.Xml") Dim x As New XmlSerializer(GetType(clsBooks)) x.Serialize(objStreamWriter, books) objStreamWriter.Close() End Sub End Module
Maakt deze xmlCode: <?xml version="1.0" encoding="utf-8"?>
<Boeken xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Boek>
<Name>VB.Net part 1</Name>
<Description>Learning vb.net</Description>
<Quantity>999</Quantity>
</Boek>
<Boek>
<Name>VB.Net part 2</Name>
<Description>Learning vb.net</Description>
<Quantity>666</Quantity>
</Boek>
<Boek>
<Name>VB.Net part 3</Name>
<Description>Learning vb.net</Description>
<Quantity>333</Quantity>
</Boek>
</Boeken>
Dus geen ArrayOf prefix...
Groeten |
_________________ con\con
Stappen, keuzes en herhaling combineren is programmeren.
|
| |
|
|
|
 |
|
|
|
|