【问题标题】:XML to Json conversion is ignoring the order of the elementsXML 到 Json 的转换忽略了元素的顺序
【发布时间】:2019-01-02 07:07:00
【问题描述】:

我在将 XML 转换为 JSON 时遇到问题

我的输入 xml 是

<Message>
    <Sequence id="S">
        <Tag id="T1"></Tag>
        <Sequence id="S1">
            <Tag id="T2"></Tag>
        </Sequence>
        <Tag id="T3"></Tag>
    </Sequence>
</Message>

我正在使用 NewtonSoft JsonConvert 将其转换为 Json

转换后的Json是这样的,所有名称为'Tag'的元素都被分组到一个数组中,它们应该被分组到同级的多个单独的'Tag'数组中

"Message": {
    "Sequence": {
      "@id": "S",
      "Tag": [
        {
          "@id": "T1"
        },
        {
          "@id": "T3"
        }
      ],
      "Sequence": {
        "@id": "S1",
        "Tag": {
          "@id": "T2"
        }
      }
    }
  }

我希望转换是

"Message": {
    "Sequence": {
      "@id": "S",
      "Tag": [
        {
          "@id": "T1"
        }
      ],
      "Sequence": {
        "@id": "S1",
        "Tag": {
          "@id": "T2"
        }
      },
      "Tag": [
        {
          "@id": "T3"
        }
      ]
    }
  }

请告诉我您对如何解决此问题的想法

【问题讨论】:

  • 能否请您展示您将xml转换为json的代码?
  • 您预期的 json 无效,属性不能复制
  • Json.NET 正在按文档说明工作。您期望 Json.NET 在 XML 到 JSON 转换期间创建重复的 JSON 属性名称,但它不会这样做。 documentation 声明,同一级别的多个同名节点组合成一个数组。 这正是您所看到的。此外,rfc 8259 声明,对象中的名称应该是唯一的。 所以您对重复名称的偏好几乎肯定是非典型的。

标签: c# json xml angular json.net


【解决方案1】:

XMLJSON 结果令人困惑。
但是如果我们分析它们,结果就会很清楚:

这是您的 XML 层次结构,每个“级别”都有自己的颜色:

  1. &lt;Message&gt; 具有 &lt;Sequence&gt; 子对象 (S),其中包含 2 个 &lt;Tag&gt; 对象 - 它们是 2 个(2 = 多个..)对象并且它们都是 "type" - &lt;Tag&gt; - 这就是为什么你会在 JSON 中得到一个数组 结果。

  2. 在您的 &lt;Sequence&gt; 孩子中,您有一个嵌套的 &lt;Sequence&gt; 对象, 此对象是相对于第一个 &lt;Sequence&gt; 对象的子对象。
    IF 其中两个子对象都是 &lt;Message&gt; 的子对象,那么 JSON 结果也将是它们的数组( "Sequence": [...],)。
    但在这种情况下,S1 是相对于 &lt;message&gt; 的孙子,相对于 S 的子。

  3. 现在,回到第二个 &lt;Sequence&gt; 对象 - 它只有 一个 &lt;tag&gt; (T2) 这就是为什么它不在数组中,您可以看到它是嵌套的 到第一个&lt;Sequence&gt; 对象(S):

您可以在XML to JSON converterCodVerter.com 中更清楚地看到它 并验证 JSON 结果 + 使其在 JSON Validator tool 中更具可读性。


这是 JSON 结果(来自 CodVerter 的 XML 到 JSON 工具):

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2022-07-31
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多