【问题标题】:Deserilise XML Document反序列化 XML 文档
【发布时间】:2015-06-24 08:27:15
【问题描述】:

我以前从未这样做过,我正在碰壁。

这也必须在 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 文件的反序列​​化。 我创建了一个类对象来处理 xml 的布局/格式。 这是那个班级:

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)

告诉我离开算不了什么。

我错过了什么?

【问题讨论】:

    标签: vb.net xml-deserialization


    【解决方案1】:

    将您的出发舱位更改为如下所示:

    <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 没用,它只是将类标记为二进制可序列化
    • XmlSerializer 只能序列化公共属性,私有字段上的 XmlElement 属性将被忽略 - 因此您可以删除它们;默认情况下,属性被序列化为名称等于属性名称的元素

    【讨论】:

    • 非常感谢您的回答 - 它有效 - 并感谢额外的 cmets。你是救生员!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多