2013-03-29 64 views
0

这是序列化和反序列化XML对象Vb.Net实例化属性的类这是一个不同类

<XmlRoot("orderadd")> 
<Serializable()> _ 
Public Class clsSMsgRequestMessage 
    <XmlElementAttribute()> Public Property ordertype() As String 
    <XmlElementAttribute()> Public Property vehicleid() As String 
    <XmlElementAttribute()> Public Property orderpriority() As String 
    <XmlElementAttribute("orderpart")> Public Property orderpart() As RequestMessageOrderaddOrderpart() 
    <XmlAttributeAttribute()> Public Property clientid() As String 
    <XmlAttributeAttribute()> Public Property transactionid() As String 
    <XmlAttributeAttribute()> Public Property numberoforderparts() As String 

    Public Sub New() 
    End Sub 
End Class 

Public Class RequestMessageOrderaddOrderpart 
    <XmlElementAttribute()> Public Property operation() As String 
    <XmlElementAttribute()> Public Property location() As String 
    <XmlElementAttribute()> Public Property loadtype() As String 
    <XmlAttributeAttribute()> Public Property orderpartnumber() As String 

    Public Sub New() 
    End Sub 

End Class 

这可以正确处理反序列化的目的数组,但现在我想正确创建此对象,以便我可以将其序列化回XML对象。

Dim anotherTest As clsSMsgRequestMessage = New clsSMsgRequestMessage() 
Dim testOrderPart1 As New RequestMessageOrderaddOrderpart 


anotherTest.clientid = "data" 
anotherTest.orderpriority = "data" 
anotherTest.ordertype = "data" 
anotherTest.transactionid = "data" 
anotherTest.vehicleid = "data" 
anotherTest.numberoforderparts = "data" 

testOrderPart1.loadtype = "data" 
testOrderPart1.location = "data" 
testOrderPart1.operation = "data" 
testOrderPart1.orderpartnumber = "data" 


anotherTest.orderpart(0) = testOrderPart1 

这里的最后一行不起作用,因为anotherTest.orderpart(0)还没有实例化。但我不知道如何实例化它,因为

anotherTest.orderpart(0) = New RequestMessageOrderaddOrderPart 

仍然带着“未设置对象实例的对象引用”。

anotherTest.orderpart = New RequestMessageOrderaddOrderPart 

回来了“类型的值不能转换为“的一维数组”

我觉得我在正确的轨道上与由自身实例它像我有做“ testOrderPart1',但我不知道如何链接到我的另一个测试。订单部分

请帮助!

回答

1

你必须首先初始化数组属性:

anotherTest.orderpart = New RequestMessageOrderaddOrderPart(10) {} 

10是数组大小。

之后,你就可以设置第一个数组元素:

anotherTest.orderpart(0) = New RequestMessageOrderaddOrderPart 

更新

不过,我想你应该改变你的财产申报成为List(Of RequestMessageOrderaddOrderPart)。随着名单,你不必指定项目的数量:

anotherTest.orderpart = New List(Of RequestMessageOrderaddOrderPart)() 

添加项目是很容易的:

anotherTest.orderpart.Add(new RequestMessageOrderaddOrderPart()) 

而你仍然可以使用索引来获取/修改项目:

Dim firstItem = anotherTest.orderpart(0) 

当然,该项目必须先使用Add方法插入。

List(Of T)也可以正常使用序列化。

+0

哦,非常感谢!我必须将其设置为这样的固定尺寸吗?基本上XML消息将会有可变数量的“部分”回来,我不会知道。我想他们永远不会超过20个左右的零件 - 只需初始化一个庞大的阵列,然后经常不使用它们中的大部分就可以了。 – Brandon

+0

我强烈建议使用'List(的RequestMessageOrderaddOrderpart)'而不是阵列 – jbabey

+0

请检查我的更新。 – MarcinJuraszek

相关问题