0

これは、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

「型の値は「の 1 次元配列」に変換できません」

「testOrderPart1」で行っているように、それ自体をインスタンス化することで正しい軌道に乗っていると思いますが、それを別のTest.orderpartにリンクする方法がわかりません

助けてください!

4

1 に答える 1

2

最初に配列プロパティを初期化する必要があります。

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)シリアル化でも問題なく動作します。

于 2013-03-29T12:16:50.747 に答える