从XML到Json的转换忽略了元素的顺序

时间:2019-01-02 07:07:00

标签: c# json xml angular json.net

我在将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"
        }
      ]
    }
  }

请让我知道您对如何解决此问题的想法

1 个答案:

答案 0 :(得分:2)

XMLJSON的结果令人困惑。
但是如果我们分析它们,将会很清楚地解释结果:

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

enter image description here

  1. <Message>的{​​{1}}子对象(<Sequence>)拥有2个S 对象-它们是2个(2 =多个..)对象,它们都是 “ type” -<Tag>-这就是为什么您将在<Tag>中获得一个数组的原因 结果。

  2. 在您的JSON子女中,您有一个嵌套的<Sequence>对象, 该对象是相对于第一个<Sequence>对象的子对象。
    IF 这两个中的两个,其中<Sequence><Message>结果的两个孩子也将是它们的数组(JSON)。
    ,但在这种情况下,"Sequence": [...],是相对于S1的孙子女,而相对于<message>是其子女。

  3. 现在,返回第二个S对象-它只有一个 <Sequence><tag>),这就是为什么它不在数组内并且可以看到它被嵌套的原因 到第一个T2对象(<Sequence>):

enter image description here

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


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

enter image description here