您好我有一个继承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>
在每个预订中只能有一条消息,但是为了它的上面的方式,我被告知应该在它自己的班级中获得该布局, 所以我想知道如何序列化并可能反序列化上述预订
答案 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>