BizTalk JSON 接收管道解码器 - 它是否必须添加根包装器元素?



BizTalk 解码器管道组件在管道配置(在 BizTalk 管理控制台中)显示 RootNode 和 RootNodeNamespace 的值。

当我不指定根时,它会爆炸并说: "原因:Json 解码器属性中未指定根节点名称">

当我指定根时,它会被添加。但是,如果我的 JSON 中有"根",为什么需要添加根?

示例 JSON:

{ "AppRequest": { 
"DocumentName": "whatever", 
"Source": "whatever" 
}
}

所以我想使用上面的 JSON,并有一个根目录为"AppRequest"的架构。 但是,如果我删除一个带有此 JSON 的文件,并将 AppRequest 指定为根,那么我会在我已经拥有的 AppRequest 周围获得一个额外的 AppRequest 包装器。

对我来说,这是一种奇怪的行为,如果你想有一个模式/契约优先的方法。 我可能会与我的贸易合作伙伴就 JSON 达成一致,然后稍后在 BizTalk 中构建架构;现在我被锁定在一个带有根的架构中,并且它下面再次具有相同名称的元素。

此外,构建 JSON 的人可能正在反序列化一个类,因此类名将是该 JSON 文件的"根"。

是的,我可以编写自己的解码器管道组件...只是想弄清楚他们为什么这样做,或者我是否错过了一些明显的东西。

是的,JSON 解码器需要根节点和命名空间。

这是有原因的。JSON 不需要等效的根节点,而 XML 需要根节点。 使其成为必需属性可消除有关转换的任何歧义。 就是这么简单。

由于您通常还需要使用XML 反汇编程序,因此您可以通过使用与 JSON 编码器根节点匹配的信封架构对内容进行去批处理来剥离 JSON 编码器添加的 rood 节点。 您也可以删除 Xml 命名空间,这也是一个好主意。

最新更新