I have never done this before and I am hitting a brick wall.
This also has to be done in vb.net which is not my thing.
This is the XML file:
<?xml version="1.0" encoding="utf-8" ?>
<Departures>
<Departure>
<Destination>Birmingham</Destination>
<Service>109</Service>
<AimedDepartureTime>13:50</AimedDepartureTime>
<ExpectedDepartureTime>13:52</ExpectedDepartureTime>
</Departure>
<Departure>
<Destination>Nuneaton</Destination>
<Service>19</Service>
<AimedDepartureTime>13:55</AimedDepartureTime>
<ExpectedDepartureTime>13:56</ExpectedDepartureTime>
</Departure>
</Departures>
I need to desrilise it and populate a datagrid control with it. The DataGrid stuff I can do.
It is the deserilisation of the xml fileI am having issues with. I created a class object to deal with th layout/format of the xml. This is that class:
Imports System.Xml.Serialization
<Serializable()>
Public Class Departure
<System.Xml.Serialization.XmlElement("Destination")>
Private DestinationValue As String
Public Property Destination() As String
Get
Return DestinationValue
End Get
Set(ByVal value As String)
DestinationValue = value
End Set
End Property
<System.Xml.Serialization.XmlElement("Service")>
Private ServiceValue As String
Public Property Service() As String
Get
Return ServiceValue
End Get
Set(ByVal value As String)
ServiceValue = value
End Set
End Property
<System.Xml.Serialization.XmlElement("AimedDepartureTime")>
Private AimedDepartureTimeValue As String
Public Property AimedDepartureTime() As String
Get
Return AimedDepartureTimeValue
End Get
Set(ByVal value As String)
AimedDepartureTimeValue = value
End Set
End Property
<System.Xml.Serialization.XmlElement("xpectedDepartureTime")>
Private ExpectedDepartureTimeValue As String
Public Property ExpectedDepartureTime() As String
Get
Return ExpectedDepartureTimeValue
End Get
Set(ByVal value As String)
ExpectedDepartureTimeValue = value
End Set
End Property
End Class
<Serializable()>
<System.Xml.Serialization.XmlRoot("Departures")>
Public Class Departures
<XmlArray("Departures"), XmlArrayItem("Departure")>
Public Departure As Departure()
End Class
And this is my calling code:
Private Sub btnXmlloader_Click(sender As Object, e As EventArgs) Handles btnXmlloader.Click
Try
Dim p As New Departures
Dim x As New XmlSerializer(p.GetType)
'Deserialize text file to a new object.
Dim objStreamReader As New StreamReader(Application.StartupPath + "\departures.xml")
Dim departures As New Departures()
departures = x.Deserialize(objStreamReader)
objStreamReader.Close()
Catch ex As Exception
End Try
End Sub
I set a breakpoint and this line:
departures = x.Deserialize(objStreamReader)
tells me that departures is nothing.
What am i missing?
Change your departure class to look like:
What you're trying now will look like
Also:
Serialization
attribute is useless for theXmlSerializer
, that just mark class as binary serializableXmlSerializer
can serialize only public properites, yourXmlElement
attributes on private fields are ignored - hence you can drop those; by default property is serialized as element with name equal to property name