反序列化 XML 文件
Deserilise XML Document
我以前从来没有这样做过,我正在碰壁。
这也必须在 vb.net 中完成,这不是我的事。
这是 XML 文件:
<?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>
我需要对它进行反序列化并用它填充数据网格控件。我能做的 DataGrid 东西。
这是 xml 文件的反序列化,我遇到了问题。
我创建了一个 class 对象来处理 xml 的 layout/format。
这是 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
这是我的调用代码:
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
我设置了一个断点和这一行:
departures = x.Deserialize(objStreamReader)
告诉我离开没什么。
我错过了什么?
将您的出发时间 class 更改为:
<System.Xml.Serialization.XmlRoot("Departures")>
Public Class Departures
Inherits List(Of Departure)
End Class
您现在尝试的将是这样的
<!-- one "Departures" for the Departures class -->
<Departures>
<!-- one "Departures" for the Departure property-->
<Departures>
<Departure ... />
</Departures>
</Departures>
还有:
Serialization
属性对于 XmlSerializer
没有用,它只是将 class 标记为二进制可序列化
XmlSerializer
只能序列化 public 属性,私有字段上的 XmlElement
属性将被忽略 - 因此您可以删除它们;默认情况下 属性 被序列化为名称等于 属性 name 的元素
我以前从来没有这样做过,我正在碰壁。
这也必须在 vb.net 中完成,这不是我的事。
这是 XML 文件:
<?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>
我需要对它进行反序列化并用它填充数据网格控件。我能做的 DataGrid 东西。
这是 xml 文件的反序列化,我遇到了问题。 我创建了一个 class 对象来处理 xml 的 layout/format。 这是 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
这是我的调用代码:
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
我设置了一个断点和这一行:
departures = x.Deserialize(objStreamReader)
告诉我离开没什么。
我错过了什么?
将您的出发时间 class 更改为:
<System.Xml.Serialization.XmlRoot("Departures")>
Public Class Departures
Inherits List(Of Departure)
End Class
您现在尝试的将是这样的
<!-- one "Departures" for the Departures class -->
<Departures>
<!-- one "Departures" for the Departure property-->
<Departures>
<Departure ... />
</Departures>
</Departures>
还有:
Serialization
属性对于XmlSerializer
没有用,它只是将 class 标记为二进制可序列化XmlSerializer
只能序列化 public 属性,私有字段上的XmlElement
属性将被忽略 - 因此您可以删除它们;默认情况下 属性 被序列化为名称等于 属性 name 的元素