-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>

我需要将 nameValuePair 定义为父结构中名为 additionalData 的结构数组

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(来自流或其他)或从磁盘加载。additionalData如果它是一个复杂的结构并且是其中的一部分,您甚至可以给它一个 XML 文件的子集。

于 2013-09-22T21:05:04.290 回答