J
Joe Cool
I have been using the Help topics on Serialize and Deserialize to
figure out how they work. I keyed in the VB samples and the Serialize
on works just fine. But if you try to feed the output XML file created
with the Serialize sample to the Deserialize sample, it does not work.
But if I manually edit the simple.xml file and make a few changes the
Deserialize sample now works. Just what is causing the first attempt
on the more complex XML file to fail?
Original XML file created with Serialize sample code (newlines have
been added)
<?xml version="1.0" encoding="utf-8"?>
<OrderedItem xmlns:inventory="http://www.cpandl.com"
mlns:money="http://www.cohowinery.com">
<inventory:ItemName>Widget</inventory:ItemName>
<inventory
escription>Regular Widget</inventory
escription>
<money:UnitPrice>2.3</money:UnitPrice>
<inventory:Quantity>10</inventory:Quantity>
<money:LineTotal>23.0</money:LineTotal>
</OrderedItem>
When you run the Deserialize sample on this file your output is:
Reading with XmlReader
0 0 0
But if I change the XML file slightly to this:
<OrderedItem>
<ItemName>Widget</ItemName>
<Description>Regular Widget</Description>
<UnitPrice>2.3</UnitPrice>
<Quantity>10</Quantity>
<LineTotal>23.0</LineTotal>
</OrderedItem>
the output from the Deserialize sample is:
Reading with XmlReader
Widget Regular Widget 2.3 10 23.0
How come?
Here is the Deserialize code:
Imports System
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization
Public Class OrderedItem
<XmlElement(Namespace:="http://www.cpandl.com")> _
Public ItemName As String
<XmlElement(Namespace:="http://www.cpandl.com")> _
Public Description As String
<XmlElement(Namespace:="http://www.cohowinery.com")> _
Public UnitPrice As Decimal
<XmlElement(Namespace:="http://www.cpandl.com")> _
Public Quantity As Integer
<XmlElement(Namespace:="http://www.cohowinery.com")> _
Public LineTotal As Decimal
' a custom method to calculate price per item
Public Sub Calculate()
LineTotal = UnitPrice * Quantity
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Dim t As New Test
' write a new purchase order
t.SerializeObject("simple.xml")
End Sub
Private Sub SerializeObject(ByVal filename As String)
Console.WriteLine("Writing With XmlTextWriter")
Dim serializer As New XmlSerializer(GetType(OrderedItem))
Dim i As New OrderedItem
With i
.ItemName = "Widget"
.Description = "Regular Widget"
.Quantity = 10
.UnitPrice = CDec(2.3)
.Calculate()
End With
' create as xmlserializernamespaces object
Dim ns As New XmlSerializerNamespaces
' add two namespaces with prefixes
ns.Add("inventory", "http://www.cpandl.com")
ns.Add("money", "http://www.cohowinery.com")
' create an xmltextwriter using filestream
Dim fs As New FileStream(filename, FileMode.Create)
Dim writer As New XmlTextWriter(fs, New UTF8Encoding)
' serialize using the xmltextwriter
serializer.Serialize(writer, i, ns)
writer.Close()
End Sub
End Class
figure out how they work. I keyed in the VB samples and the Serialize
on works just fine. But if you try to feed the output XML file created
with the Serialize sample to the Deserialize sample, it does not work.
But if I manually edit the simple.xml file and make a few changes the
Deserialize sample now works. Just what is causing the first attempt
on the more complex XML file to fail?
Original XML file created with Serialize sample code (newlines have
been added)
<?xml version="1.0" encoding="utf-8"?>
<OrderedItem xmlns:inventory="http://www.cpandl.com"
mlns:money="http://www.cohowinery.com">
<inventory:ItemName>Widget</inventory:ItemName>
<inventory


<money:UnitPrice>2.3</money:UnitPrice>
<inventory:Quantity>10</inventory:Quantity>
<money:LineTotal>23.0</money:LineTotal>
</OrderedItem>
When you run the Deserialize sample on this file your output is:
Reading with XmlReader
0 0 0
But if I change the XML file slightly to this:
<OrderedItem>
<ItemName>Widget</ItemName>
<Description>Regular Widget</Description>
<UnitPrice>2.3</UnitPrice>
<Quantity>10</Quantity>
<LineTotal>23.0</LineTotal>
</OrderedItem>
the output from the Deserialize sample is:
Reading with XmlReader
Widget Regular Widget 2.3 10 23.0
How come?
Here is the Deserialize code:
Imports System
Imports System.IO
Imports System.Text
Imports System.Xml
Imports System.Xml.Serialization
Public Class OrderedItem
<XmlElement(Namespace:="http://www.cpandl.com")> _
Public ItemName As String
<XmlElement(Namespace:="http://www.cpandl.com")> _
Public Description As String
<XmlElement(Namespace:="http://www.cohowinery.com")> _
Public UnitPrice As Decimal
<XmlElement(Namespace:="http://www.cpandl.com")> _
Public Quantity As Integer
<XmlElement(Namespace:="http://www.cohowinery.com")> _
Public LineTotal As Decimal
' a custom method to calculate price per item
Public Sub Calculate()
LineTotal = UnitPrice * Quantity
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Dim t As New Test
' write a new purchase order
t.SerializeObject("simple.xml")
End Sub
Private Sub SerializeObject(ByVal filename As String)
Console.WriteLine("Writing With XmlTextWriter")
Dim serializer As New XmlSerializer(GetType(OrderedItem))
Dim i As New OrderedItem
With i
.ItemName = "Widget"
.Description = "Regular Widget"
.Quantity = 10
.UnitPrice = CDec(2.3)
.Calculate()
End With
' create as xmlserializernamespaces object
Dim ns As New XmlSerializerNamespaces
' add two namespaces with prefixes
ns.Add("inventory", "http://www.cpandl.com")
ns.Add("money", "http://www.cohowinery.com")
' create an xmltextwriter using filestream
Dim fs As New FileStream(filename, FileMode.Create)
Dim writer As New XmlTextWriter(fs, New UTF8Encoding)
' serialize using the xmltextwriter
serializer.Serialize(writer, i, ns)
writer.Close()
End Sub
End Class