【问题标题】:Why does the DeserializeXmlNode output XML enclose array elements in an extra tag?为什么 DeserializeXmlNode 输出 XML 将数组元素包含在一个额外的标记中?
【发布时间】:2015-06-19 06:50:25
【问题描述】:

我将以下 JSON 转换为 XML:

{
  "root": {
    "object": [{
      "Name": "Cust1",
      "addresses": [
        [{
          "AddressLine1": "Address1",
          "AddressLine2": "Address2"
        }],
        [{
          "AddressLine1": "Address3",
          "AddressLine2": "Address4"
        }]
      ]
    }, {
      "Name": "Cust2",
      "addresses": [
        [{
          "AddressLine1": "Address1_2",
          "AddressLine2": "Address2_2"
        }],
        [{
          "AddressLine1": "Address3_2",
          "AddressLine2": "Address4_2"
        }]
      ]
    }]
  }
}

我使用以下代码将其转换为XML(在JSON转换后已手动添加了根元素):

XmlDocument xmlDoc = JsonConvert.DeserializeXmlNode(rootJson);

输出的XML如下:

<root>
<object>
    <Name>Cust1</Name>
    <addresses>
        <addresses>
            <AddressLine1>Address1</AddressLine1>
            <AddressLine2>Address2</AddressLine2>
        </addresses>
    </addresses>
    <addresses>
        <addresses>
            <AddressLine1>Address3</AddressLine1>
            <AddressLine2>Address4</AddressLine2>
        </addresses>
    </addresses>
</object>
<object>
    <Name>Cust2</Name>
    <addresses>
        <addresses>
            <AddressLine1>Address1_2</AddressLine1>
            <AddressLine2>Address2_2</AddressLine2>
        </addresses>
    </addresses>
    <addresses>
        <addresses>
            <AddressLine1>Address3_2</AddressLine1>
            <AddressLine2>Address4_2</AddressLine2>
        </addresses>
    </addresses>
</object>

问题出在&lt;addresses&gt; 标签后面跟着另一个&lt;addresses&gt; 标签。

【问题讨论】:

  • 似乎还有一层额外的 JSON 数组嵌套——[[{ "AddressLine1": "Address1", "AddressLine2": "Address2"}]] 而不是 [{ "AddressLine1": "Address1", "AddressLine2": "Address2"}]。这可能会导致额外级别的 XML 嵌套。

标签: json xml json.net deserialization


【解决方案1】:

因为你下面多了一个[]

  "addresses": [
    [{
      "AddressLine1": "Address1",
      "AddressLine2": "Address2"
    }],
    [{
      "AddressLine1": "Address3",
      "AddressLine2": "Address4"
    }]
  ]

如果您删除多余的[],如下所示

  "addresses": [
    {
      "AddressLine1": "Address1",
      "AddressLine2": "Address2"
    },
    {
      "AddressLine1": "Address3",
      "AddressLine2": "Address4"
    }
  ]

你的json会是这样的

{
  "root": {
    "object": [{
      "Name": "Cust1",
      "addresses": [
        {
          "AddressLine1": "Address1",
          "AddressLine2": "Address2"
        },
        {
          "AddressLine1": "Address3",
          "AddressLine2": "Address4"
        }
      ]
    }, {
      "Name": "Cust2",
      "addresses": [
        {
          "AddressLine1": "Address1_2",
          "AddressLine2": "Address2_2"
        },
        {
          "AddressLine1": "Address3_2",
          "AddressLine2": "Address4_2"
        }
      ]
    }]
  }
}

您将获得以下输出 XML

<root>
  <object>
    <Name>Cust1</Name>
    <addresses>
      <AddressLine1>Address1</AddressLine1>
      <AddressLine2>Address2</AddressLine2>
    </addresses>
    <addresses>
      <AddressLine1>Address3</AddressLine1>
      <AddressLine2>Address4</AddressLine2>
    </addresses>
  </object>
  <object>
    <Name>Cust2</Name>
    <addresses>
      <AddressLine1>Address1_2</AddressLine1>
      <AddressLine2>Address2_2</AddressLine2>
    </addresses>
    <addresses>
      <AddressLine1>Address3_2</AddressLine1>
      <AddressLine2>Address4_2</AddressLine2>
    </addresses>
  </object>
</root>

工作小提琴:https://dotnetfiddle.net/Oyj91s

【讨论】:

    猜你喜欢
    • 2015-09-22
    • 2019-09-18
    • 2017-02-12
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多