BizTalk JSON编码器管道从XSD生成不正确的JSON对象

时间:2018-12-25 06:27:22

标签: json biztalk pipeline encoder biztalk-2016

我正在将BizTalk管道与JSON编码器一起使用,以将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架构中进行哪些更改?

3 个答案:

答案 0 :(得分:1)

‪使用Newtonsoft时,我在c#中得到相同的结果。 #text节点的名称空间与根名称空间不同时,将添加#text节点,因为在JSON中,它成为具有文本和属性名称空间的对象。 ‬

答案 1 :(得分:0)

我添加了一个自定义biztalk管道并使用了json牛顿软nuget包。

答案 2 :(得分:0)

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

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

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

注意:XML需要一个根节点,而JSON则不需要。在您的JSON组装模式中,使用您喜欢的任何名称创建一个根节点。在JSON编码器中,有一个复选框可以删除包含有效负载的根节点。

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