类继承时继承另一个类的列表

时间:2014-05-07 15:57:55

标签: xml vb.net serialization

您好我有一个继承Message列表的BOOKING,如下所示

Public Class BOOKING : Inherits List(Of Message)
Private Property MessageProperty As Message

<XmlAttribute>
Public Property partner As String
<XmlAttribute>
Public Property transaction As String
<XmlAttribute>
Public Property version As String


Public Property Message As Message
    Get
        Return MessageProperty
    End Get
    Set(value As Message)
        MessageProperty = value
    End Set
End Property

邮件类具有预订的所有属性 当我尝试序列化没有什么是序列化这里是我用来设置属性和序列化预订的代码

Try
        Dim z As New BOOKING
        Dim x As New Message

        z.partner = "company name"
        z.transaction = "BOOKING"
        z.version = "1.0"
        x.MessageType = "C"
        x.CustomerNumber = "123"
        x.BookingReference = "5845"
        x.CustomerBookingReference = "036598"
        x.NoDrivers = "1"
        z.Message = x
        SaveAsXML(z)
        Return True
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

我的另存为xml在

之下
Try
        Dim Samples As New List(Of BOOKING)
        Dim Files As String() = Directory.GetFiles("c:\ftptest\New Booking")
        For Each fl In Files

            'Deserialize XML file
            Dim objStreamReader As New StreamReader(fl)
            Dim i As New BOOKING
            Dim x As New XmlSerializer(i.GetType)
            i = x.Deserialize(objStreamReader)
            Samples.Add(i)
        Next
        Form1.DataGridView1.DataSource = Samples
        Return True
    Catch ex As Exception
        Throw ex
    End Try

xml文件导致此

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMessage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

预订的布局必须如下

<BOOKING>
  <Message>
       message properties here
  </Message>
<BOOKING>

在每个预订中只能有一条消息,但是为了它的上面的方式,我被告知应该在它自己的班级中获得该布局, 所以我想知道如何序列化并可能反序列化上述预订

1 个答案:

答案 0 :(得分:1)

列出的BOOKING类无效:序列化程序将被一个类混淆,该类是与其属性之一相同的类型的List。由于每个预订包有一个消息,因此您根本不需要列表。

我不知道partner, transaction or version应该出现在哪里。因此,我将它们作为预订道具,因为这就是您的代码显示的内容。如果应该在块内,那么它们实际上是Message属性,而Booking是空的。

Public Class BOOKING

    Public Property partner As String
    Public Property transaction As String
    Public Property version As String

    Public Property [Message] As BookingMessage

    Public Sub New()
        ' create a new Msg object
        [Message] = New BookingMessage
    End Sub

    ' Message Properties
    Public Class BookingMessage
        Public Property MessageType As String
        Public Property CustomerNumber As String
        Public Property BookingReference As String
        Public Property CustomerBookingReference As String
        Public Property NoDrivers As String

    End Class

End Class

测试代码:

    Dim B As New BOOKING
    With B
        .partner = "Foo"
        .transaction = "ABC"
        .Message.BookingReference = "123456"
        .Message.CustomerBookingReference = "ziggy"
        .Message.NoDrivers = "1"
    End With

    Dim x As New Xml.Serialization.XmlSerializer(GetType(BOOKING))
    x.Serialize(New System.IO.FileStream("C:\Temp\Booking2.xml",
           IO.FileMode.OpenOrCreate), B)

输出:

<?xml version="1.0"?> 
<BOOKING xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">   
    <partner>Foo</partner> 
    <transaction>ABC</transaction>   
    <Message>
        <BookingReference>123456</BookingReference>
        <CustomerBookingReference>ziggy</CustomerBookingReference>
        <NoDrivers>1</NoDrivers>   
    </Message> 
 </BOOKING>