-1

別の構造内で構造の配列を定義しようとしていますが、課題があります。基本的に、以下のようなxmlノードを消費することになっています:

<additionalData> 
  <nameValuePair> 
    <name>amount</name> 
    <value>10</value> 
  </nameValuePair> 
  <nameValuePair> 
    <name>billerId</name> 
    <value>4665890107880063161</value> 
  </nameValuePair> 
  <nameValuePair> 
    <name>billNumber</name> 
    <value>12434829</value> 
  </nameValuePair> 
</additionalData>

additionalData という親構造体内の構造体配列として nameValuePair を定義する必要があります。

4

2 に答える 2

1

KeyValue-Pairs を含むデータ構造はDictionaryです。特定の注文が必要ない場合に使用できます

Dim additionalData As New Dictionary(Of String, String)()
additionalData.Add("myname", "myvalue")

アイテムが特定の順序になっている場合は、使用できますList

Dim additionalData As New List(Of KeyValuePair(Of String, String))()

Dim additionalDataItem As New KeyValuePair(Of String, String)("myname", "myvalue")
additionalData.Add(additionalDataItem)

編集:

   struct Transaction
   {
      public Dictionary<string, string> additionalData;
   }

Transaction transaction;
transaction.additionalData = new Dictionary<string, string>();

transaction.additionalData.Add("amount", "10");
于 2013-09-22T08:59:04.520 に答える
0

以下のコードを確認してください。lst探している構造はおそらく次のとおりです。

Dim xml As XElement = <additionalData>
                        <nameValuePair>
                          <name>amount</name>
                          <value>10</value>
                        </nameValuePair>
                        <nameValuePair>
                          <name>billerId</name>
                          <value>4665890107880063161</value>
                        </nameValuePair>
                        <nameValuePair>
                          <name>billNumber</name>
                          <value>12434829</value>
                        </nameValuePair>
                      </additionalData>

Dim lst As New List(Of KeyValuePair(Of String, String))
For Each nameValuePair As XElement In xml.Elements
  Dim name As String = nameValuePair.<name>.Value
  Dim value As String = nameValuePair.<value>.Value
  lst.Add(New KeyValuePair(Of String, String)(name, value))
Next

KeyValuePair を独自の別のクラスに置き換えることも、ジェネリック List 全体をより洗練されたものに置き換えることもできます。XML ファイルを使用する方法は、おそらく同じままです。

上記コード実行後の内容lst(デバッガビュー)です。

ここに画像の説明を入力

編集- いくつかのカスタム クラスを定義する場合:

Class AdditionalData : Inherits List(Of NameValuePair)
  Sub New(xml As XElement)
    For Each nameValuePair As XElement In xml.Elements
      Dim name As String = nameValuePair.<name>.Value
      Dim value As String = nameValuePair.<value>.Value
      Me.Add(New NameValuePair(name, value))
    Next
  End Sub
End Class

Class NameValuePair
  Public ReadOnly Name As String
  Public ReadOnly Value As String
  Sub New(name As String, value As String)
    Me.Name = name
    Me.Value = value
  End Sub
End Class

上記のコードを次のように変更できます。

Dim lst As New AdditionalData(xml) 'xml is inline XML file declared above

または、あなたの場合、おそらく次のようになります。

Dim lst As New AdditionalData(XDocument.Load("path_to_xml").Root)

意図的に XElement を受け入れるようにしました。このようにして、インライン XML または解析済み XML (ストリームまたはその他から) を渡したり、ディスクからロードしたりできます。XML ファイルが複雑な構造で、その一部である場合は、XML ファイルのサブセットを指定することもできますadditionalData

于 2013-09-22T21:05:04.290 に答える