BizTalk 中的 FHIR JSON 到 XML 解码
Posted
技术标签:
【中文标题】BizTalk 中的 FHIR JSON 到 XML 解码【英文标题】:FHIR JSON to XML decoding in BizTalk 【发布时间】:2017-07-06 08:44:33 【问题描述】:我刚开始使用 FHIR 和 json,所以我的问题可能不会很好地提出。
我已经构建了一个 BizTalk 管道组件,以使用此库 https://github.com/ewoutkramer/fhir-net-api 将 FHIR-json 转换为 FHIR-xml,基于我在此处找到的示例 http://soapfault.com/blog/2016/08/hl7-fhir-json-decoding-in-biztalk/
这是来自管道组件的代码 sn-p。它几乎与示例相同。
//Read the json message
using (TextReader tr = new StreamReader(originalDataStream))
json = tr.ReadToEnd();
//Use FHIR-NET-API to create a FHIR resource from the json
Hl7.Fhir.Serialization.ResourceReader resourceReader = new Hl7.Fhir.Serialization.ResourceReader(FhirJsonParser.CreateFhirReader(json), ParserSettings.Default);
//Use FHIR-NET-API to serialize the resource to XML
byte[] resourceXmlBytes = Hl7.Fhir.Serialization.FhirSerializer.SerializeToXmlBytes(resourceReader.Deserialize());
管道组件能够解码任何以
"resourceType": "ImagingStudy",
但我收到这样开头的消息的解析错误,
"resourceType" : "Bundle",
"entry" : [
"resource" :
"resourceType" : "ImagingStudy",
或
"entry": [
"fullUrl": "http://fhirtest.uhn.ca/baseDstu2/ImagingStudy/EXexample",
"resource":
"resourceType": "ImagingStudy",
这是我遇到的几个错误,
There was a failure executing the receive pipeline: "LALALA.Imaging.Pipelines.FHIRJasonDecoderRP, LALALA.Imaging.Pipelines, Version=1.0.0.0, Culture=neutral, PublicKeyToken=19bb8b5ea64396aa" Source: "FHIRJsonDecoder" Receive Port: "RP_LA_Test_FILE" URI: "D:\Projects\LALALA.Imaging\In\*.json" Reason: Data at the root level is invalid. Line 1, position 1.
或
Reason: At line 1, pos 1: Cannot determine type of resource to create from json input data: no member resourceType was found
对于我的解决方案,最终目标是能够将 FHIR 图像研究消息包解析为单个 fhir xml 消息,然后将其映射到 HL7 ORU 消息。
对于上述问题的任何帮助或有关如何使用 BizTalk 实现我的最终目标的建议将不胜感激。
【问题讨论】:
【参考方案1】:通常不需要直接调用 ResourceReader,但我尝试重现您的错误,如下所示:
var json = @"
""resourceType"" : ""Bundle"",
""entry"" : [
""resource"" :
""resourceType"" : ""ImagingStudy""
]";
// SHORT VERSION: var b = new FhirJsonParser().Parse<Bundle>(json);
var b = new
Hl7.Fhir.Serialization.ResourceReader(
FhirJsonParser.CreateFhirReader(json),
ParserSettings.Default).Deserialize();
Assert.IsNotNull(b);
但是,两者都可以正常工作。读取流时可能出现问题?
您也可以尝试直接从流中读取:
var b = new FhirJsonParser().Parse<Bundle>(new
Newtonsoft.Json.JsonTextReader(stream));
【讨论】:
感谢 Ewout,我能够编辑我的一些示例“捆绑”消息并让管道将它们解码为 XML。我仍然不确定其他人有什么问题,但现在我有一个工作示例可供参考。以上是关于BizTalk 中的 FHIR JSON 到 XML 解码的主要内容,如果未能解决你的问题,请参考以下文章
Dart/Flutter 中用于 FHIR 资源的 Json oneOf
BizTalk - JSON Post WebService 导致 500 内部服务器错误
BizTalk 2020 JSON 编码器生成对象的根数组,即以 [ ] 开头