【发布时间】:2019-11-09 00:55:19
【问题描述】:
我必须从 BizTalk 发送一个如下所示的 JSON 文件。
[
{
"attr": {
"b587d548-8aa6-42b7-b292-0f3e13452c35": {
"1": "-2.073420455529934786"
}
},
"guid": "80974561-a449-4a94-8b3e-970822b84406",
"anotherGuid": "05060c4c-f0af-46b8-810e-30c0c00a379e",
"lastModified": "2019-11-09T01:44:34.157Z",
"attributes":
{
"4": "2019-11-05T20:30:57.6Z",
"8": "6",
"10": "8",
"13": "7",
"27": "3",
...
},
...
}
]
在 BizTalk 架构中,我无法定义这样的内容。 attr 中的 Guid 和 attributes 中的数字属性名称不固定,可能是其他值。
我想实现一个自定义管道组件,将 BizTalk XML 转换为输出 JSON。但我不知道如何解决属性名称的问题,因为这些不是有效的 XML 名称。
解决这个问题的最优雅的方法是什么?
提前致谢。
更新更多信息
要获得像上面那样的JSON,XML 必须是无效的
<root>
<element>
<anotherGuid>05060c4c-f0af-46b8-810e-30c0c00a379e</anotherGuid>
<attr>
<b587d548-8aa6-42b7-b292-0f3e13452c35>
<1>-2.073420455529934786</1>
</b587d548-8aa6-42b7-b292-0f3e13452c35>
</attr>
<attributes>
<10>8</10>
<13>7</13>
<27>3</27>
<4>2019-11-05T20:30:57.6Z</4>
<8>6</8>
</attributes>
<guid>80974561-a449-4a94-8b3e-970822b84406</guid>
<lastModified>2019-11-09T01:44:34.157Z</lastModified>
</element>
</root>
要获得有效的XML,我必须更改无效元素,即,而不是<4 />,可能是<e4 />、<element name="4" /> 或类似的东西。然后解析器(或其他?)必须将此 XML 元素映射到正确的 JSON 元素。
【问题讨论】:
-
您的问题到底是什么?您标记了您的问题c#,您的问题是,如何生成像 c# 中所示的 JSON 文件? 是吗,如何反序列化所示的 JSON 文件在 c# 中? 还是关于将 XML 转换为 JSON?
-
你为什么关心 XML?为什么不直接定义一个合适的 c# 模型并将其序列化为 JSON?由于您需要在此处转换的 XML 格式不正确,因此似乎没有帮助。
-
内部 BizTalk 仅适用于 XML。没有其他可能。我能做的是在发送之前获取输出流,并在管道组件中用 C# 做一些事情。即我可以将 XML 反序列化为 C# 对象并将其序列化为 JSON。但是我的 XML 不会给出有效的对象,因为不允许使用像
public string 4 { get; set; }这样的东西。重要的是我最后得到了显示的 JSON。如果 XML 看起来不同,但会被序列化为这个 JSON 就可以了。我不知道序列化程序如何从 XML 或 C# 对象创建这个 JSON。 -
问题中显示的“XML”是 BizTalk 写入输出流的实际 XML 吗?因为它不是,正如你所注意到的,格式正确。如果没有,您能否分享一个实际 XML 的示例?或者您是否正在尝试设计可以转换为使用 c# 显示的 JSON 的 XML?
-
@dbc BizTalk 有一些组件可以将 xml 转换为不同的消息格式,如平面文件和 json。提问者试图弄清楚如何仍然利用这些组件。另请参阅他试图利用的
JsonEncoder Class:docs.microsoft.com/en-us/dotnet/api/…
标签: json biztalk biztalk-pipelines biztalk-schemas