1

我正在使用带有 JSON 编码器的 BizTalk 管道将 XML 转换为 JSON。我已经创建了 XSD,但生成的 JSON 具有 #text 而不仅仅是我的元素的值。

任何想法我做错了什么?

<xs:schema attributeFormDefault="unqualified"      elementFormDefault="unqualified"     targetNamespace="http://BookingEngine.Schemas.JSONSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
    <xs:element minOccurs="1" name="affiliate_reference_id" type="xs:unsignedShort" />
    <xs:element minOccurs="1" name="hold" type="xs:boolean" />
    <xs:element minOccurs="1" maxOccurs="unbounded" name="rooms">
      <xs:complexType>
        <xs:sequence>
          <xs:element minOccurs="1" name="email" type="xs:string" />

        </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element minOccurs="1" maxOccurs="unbounded" name="payments">
      <xs:complexType>
        <xs:sequence>
          <xs:element minOccurs="1" name="type" type="xs:string" />

        </xs:sequence>
         </xs:complexType>
        </xs:element>
        <xs:element minOccurs="1" name="affiliate_metadata" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

转换为以下 JSON

{
  "affiliate_reference_id": {
    "#text": "4480"
  },
  "hold": {
    "#text": "false"
  },
  "rooms": [
    {
      "email": "john@example.com"
    }
  ],
  "payments": [
    {
      "type": "customer_card"
    }
  ]
}

预期的结果是

{
  "affiliate_reference_id": "4480",
  "hold":  "false",
  "rooms": [
    {
      "email": "john@example.com"
    }
  ],
  "payments": [
    {
      "type": "customer_card"
    }
  ]
}

知道为什么会弹出#text 以及如何删除它吗?我需要在我的 XSD 架构中进行哪些更改?

4

3 回答 3

1

使用 Newtonsoft 时,我在 c# 中有相同的结果。#text 节点在它们具有与根命名空间不同的命名空间时添加,因为在 JSON 中它成为具有文本和属性命名空间的对象。</p>

于 2018-12-26T07:16:43.320 回答
0

我用 JSON 编码器创建了一个管道并且遇到了同样的问题。

秘诀是您需要在管道中的 JSON 编码器之前添加一个 XML 编码器。是的,这很奇怪。

为所需的 JSON 结果创建具有正确数据类型的架构。将该架构添加到 XML 编码器文档架构属性。该模式允许您控制 JSON 编码器的工作方式。

注意:XML 需要单个根节点,但 JSON 不需要。在您的 JSON 程序集模式中,使用您喜欢的任何名称创建一个根节点。在 JSON 编码器中有一个复选框,用于删除包含有效负载的根节点。

Javascript 数据类型与 XML(例如日期)不同,因此可能需要进行一些翻译。

于 2020-01-07T23:34:58.850 回答
0

我添加了一个自定义 biztalk 管道并使用了 json newton soft nuget package 。

于 2018-12-27T14:31:24.583 回答