【问题标题】:Vb.Net instantiate a Property of a class that is an array of a different classVb.Net实例化一个类的属性,它是一个不同类的数组
【发布时间】:2013-03-29 12:09:50
【问题描述】:

这是为了对 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”一样,但我不知道如何将它链接到我的 anotherTest.orderpart

请帮忙!

【问题讨论】:

    标签: .net arrays vb.net instantiation


    【解决方案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) 也可以很好地用于序列化。

    【讨论】:

    • 太酷了,谢谢!我必须将它设置为这样的固定大小吗?基本上 XML 消息将返回可变数量的“部分”,我不知道。我想他们永远不会有超过 20 个左右的部分 - 只需初始化一个巨大的数组然后经常不使用其中的大部分就可以了吗?
    • 我强烈建议使用List(Of RequestMessageOrderaddOrderpart) 而不是数组
    猜你喜欢
    • 2016-02-13
    • 2021-07-18
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2022-06-14
    • 2021-11-19
    相关资源
    最近更新 更多