BizTalk jsonencodes null-boolean 为空字符串
BizTalk jsonencodes null-boolean to empty string
我们的 Dynamics CRM 系统导出一个包含布尔元素的实体。元素可以具有的值是:true、false 和 null。如果不知道元素是否机密,则使用 null 值。例如 Dynamics 将导出以下 xml:
<SecretPhone>true</SecretPhone>
<SecretEmail>false</SecretEmail>
<SecretAddress i:nil = "true">
然后,当 BizTalk 使用带 json 编码器管道的 SB 消息传递适配器将其发送到 Azure Servicebus 中的主题时,结果如下:
{
"SecretPhone": true,
"SecretEmail": false,
"SecretAddress": ""
}
我本以为 null 布尔值是 null 而不是空字符串:
{
"SecretPhone": true,
"SecretEmail": false,
"SecretAddress": null
}
我尝试通过以下方式映射到目标 xml
<SecretAddress i:nil = "true" /> maps to <SecretAddress />
这导致 json 中的空字符串。 (SecretAddress: "")
我也试过这样映射:
<SecretAddress i:nil = "true"> maps to <SecretAddress i:nil = "true" />
但这会导致更加陌生 json
"SecretAddress": {
"@nil": "true"
},
我们正在使用 BizTalk 2020 CU3。 Sandro Pereira 构建了一个自定义的 JsonEncoder 管道组件,它可以覆盖内置的 JsonEncoder,所以我可能需要使用它。我现在的解决方法是将 null 布尔值映射到 false,但这会改变发送到目标系统的数据。
还有其他方法可以json将空 xml 布尔值编码为空 json 值吗?
由于圣诞假期,花了一些时间,然后等待测试人员的反馈。在阅读了@Dijkgraaf 对他在上面评论中链接到的问题的回答后,我设法解决了这样的问题:
目标模式中的所有布尔元素都将 nillable 属性设置为 true。然后在 BizTalk 映射中,我使用带有内联 xslt 的脚本函数来映射布尔元素:
<xsl:variable name="boolEmail" select="/SecretEmail"/>
<xsl:choose>
<xsl:when test="$boolEmail=''">
<SecretEmail/>
</xsl:when>
<xsl:otherwise>
<SecretEmail>
<xsl:value-of select="$boolEmail" />
</SecretEmail>
</xsl:otherwise>
</xsl:choose>
有了这个,我现在可以在目标消息中得到 true、false 和 null json 值。
我们的 Dynamics CRM 系统导出一个包含布尔元素的实体。元素可以具有的值是:true、false 和 null。如果不知道元素是否机密,则使用 null 值。例如 Dynamics 将导出以下 xml:
<SecretPhone>true</SecretPhone>
<SecretEmail>false</SecretEmail>
<SecretAddress i:nil = "true">
然后,当 BizTalk 使用带 json 编码器管道的 SB 消息传递适配器将其发送到 Azure Servicebus 中的主题时,结果如下:
{
"SecretPhone": true,
"SecretEmail": false,
"SecretAddress": ""
}
我本以为 null 布尔值是 null 而不是空字符串:
{
"SecretPhone": true,
"SecretEmail": false,
"SecretAddress": null
}
我尝试通过以下方式映射到目标 xml
<SecretAddress i:nil = "true" /> maps to <SecretAddress />
这导致 json 中的空字符串。 (SecretAddress: "")
我也试过这样映射:
<SecretAddress i:nil = "true"> maps to <SecretAddress i:nil = "true" />
但这会导致更加陌生 json
"SecretAddress": {
"@nil": "true"
},
我们正在使用 BizTalk 2020 CU3。 Sandro Pereira 构建了一个自定义的 JsonEncoder 管道组件,它可以覆盖内置的 JsonEncoder,所以我可能需要使用它。我现在的解决方法是将 null 布尔值映射到 false,但这会改变发送到目标系统的数据。
还有其他方法可以json将空 xml 布尔值编码为空 json 值吗?
由于圣诞假期,花了一些时间,然后等待测试人员的反馈。在阅读了@Dijkgraaf 对他在上面评论中链接到的问题的回答后,我设法解决了这样的问题:
目标模式中的所有布尔元素都将 nillable 属性设置为 true。然后在 BizTalk 映射中,我使用带有内联 xslt 的脚本函数来映射布尔元素:
<xsl:variable name="boolEmail" select="/SecretEmail"/>
<xsl:choose>
<xsl:when test="$boolEmail=''">
<SecretEmail/>
</xsl:when>
<xsl:otherwise>
<SecretEmail>
<xsl:value-of select="$boolEmail" />
</SecretEmail>
</xsl:otherwise>
</xsl:choose>
有了这个,我现在可以在目标消息中得到 true、false 和 null json 值。