Vb.Net实例化一个类的Property,它是另一个类的数组



这是为了序列化和反序列化Xml对象

<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'但我不知道如何链接到我的另一个测试。orderpart

请帮忙!

你必须先初始化你的array属性:

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)也可以很好地进行序列化。

相关内容

最新更新