BizTalk解码器管道组件在管道配置中显示RootNode和RootNodeNamespace的值(在BizTalk管理控制台中)。
当我没有指定根时,它会爆炸并说: “原因:在Json解码器属性中未指定根节点名称”
当我指定根时,它会被添加。但是,如果我的JSON中有“root”,为什么需要添加root?
示例JSON: {“AppRequest”:{ “DocumentName”:“不管”, “来源”:“无论什么” } }
所以我想使用上面的JSON,并拥有一个带有“AppRequest”根的模式。但是如果我使用这个JSON删除一个文件,并将AppRequest指定为Root,那么我会在AppRequest周围获得一个额外的AppRequest包装器。
对我来说,这是一种奇怪的行为,如果你想要一个架构/合同第一种方法。我可能会与我的贸易伙伴商定JSON,然后在BizTalk中构建架构;现在我已经锁定了一个带有root的模式,并且它下面的元素再次具有相同的名称。
此外,构建JSON的人可能正在反序列化类,因此类名将是该JSON文件的“根”。
是的,我可以编写自己的解码器管道组件...只是想弄清楚他们为什么这么做,或者如果我错过了一些明显的东西。
答案 0 :(得分:3)
是的,JSON解码器需要根节点和命名空间。
这是有原因的。 JSON不需要等效的根节点,而XML确实需要根节点。使其成为必需的属性消除了有关转换的任何含糊不清。就是这么简单。
由于您通常还需要使用 XML反汇编程序,因此您可以通过基本上使用与JSON匹配的信封模式来修改内容来剥离JSON编码器添加的rood节点编码器根节点。您也可以删除Xml命名空间,这也是一个好主意。