当类继承另一个类的列表时序列化

2024-01-04

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

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>

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


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

我不知道在哪里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)

Output:

<?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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当类继承另一个类的列表时序列化 的相关文章

随机推荐