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

BizTalk JSON Receive Pipeline Decoder - Does it have to add a root wrapper element?

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

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

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

示例JSON:

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

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

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

此外,构建 JSON 的人可能正在反序列化 class,因此 class 名称将是该 JSON 文件的“根”。

是的,我可以编写自己的解码器流水线组件……只是想弄清楚他们为什么按照他们的方式来做,或者我是否遗漏了一些明显的东西。

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

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

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