我正在使用库fhir-net-api dstu2将传入的FHIR JSON从Restful web service解析为BizTalk管道组件中的XML,然后将其传递给XML反汇编程序,以便在biztalk中进行辩论。大多数消息都没有问题,但我在偶尔出现的消息中得到了以下错误。
“给定编码中的无效字符。行% 1,位置12700。”
我已经检查了消息,在传入的JSON中看不到会导致此错误的任何差异。查看错误消息中给定的字符位置,fhir-net-api的XML输出显示以下问题。出于某种原因,库缩短了位置,并放入了一个捆绑标记。<Bundle xmlns="http://hl7.org/fhir"><total value="9" />
对于这里发生的事情或者如何进行故障排除,您有什么想法吗?
我不能发布完整的消息,但这里是问题区域的片段。
输入JSON代码段
"hospitalization": {"dischargeDiagnosis": [ {
"reference": "#Reason",
"display": "DWA-Discharged with Approval"
}]},
"location": [{"location": {"display": "SPH 4th Bunny Dr’s Clinic"}}],
"serviceProvider": {"display": "FOO"}
}},
{"resource": {
"resourceType": "Encounter",
"id": "FOO0009-394a-4c51",
"extension": [输出XML代码段
<hospitalization>
<dischargeDiagnosis>
<reference value="#Reason" />
<display value="DWA-Discharged with Approval" />
</dischargeDiagnosis>
</hospitalization>
<location>
<location>
<display value="SPH 4<Bundle xmlns="http://hl7.org/fhir">
<total value="9" />
<entry>
<resource>
<Encounter>EDIT -I隔离了问题资源并取消了消息的识别。下面是导致上述错误的完整JSON消息。我尝试了FHIR JSON to XML notepad++插件,它正确地序列化了消息。
以下是管道组件的代码。
Hl7.Fhir.Serialization.ResourceReader resourceReader = new Hl7.Fhir.Serialization.ResourceReader(FhirJsonParser.CreateFhirReader(json), ParserSettings.Default);
string resourceXmlString = Hl7.Fhir.Serialization.FhirSerializer.SerializeResourceToXml(resourceReader.Deserialize());以下是导致该问题的JSON
{
"resourceType": "Bundle",
"total": 1,
"entry": [
{"resource": {
"resourceType": "Encounter",
"id": "10000000-0000-0000-000-200000000",
"extension": [
{
"url": "https://foo.org/documents/fhir/extensions/encounter-facility",
"valueString": "St. Foo Hospital"
},
{
"url": "https://foo.org/documents/fhir/extensions/encounter-service",
"valueString": "Foo PROGRAM/Foo ECHOCARDIOLOGY"
},
{
"url": "https://foo.org/documents/fhir/extensions/encounter-patienttype",
"valueString": "Diagnostic - Outpatient"
},
{
"url": "https://foo.org/documents/fhir/extensions/encounter-documentcount",
"valueInteger": 0
},
{
"url": "https://foo.org/documents/fhir/extensions/encounter-entitysourcesystem",
"valueString": "CDR"
},
{
"url": "https://foo.org/documents/fhir/extensions/encounter-mrnid",
"valueString": "10000000"
}
],
"identifier": [
{
"use": "official",
"value": "1000000-5420-0000-0000-00000"
},
{
"use": "secondary",
"value": "100000000000"
}
],
"patient": {"reference": "Patient/000000000"},
"participant": [
{
"type": [ {
"coding": [ {
"system": "http://hl7.org/fhir/v3/ParticipationType",
"code": "PRCP"
}],
"text": "Primary Care Physician"
}],
"individual": {"display": "Foo, Guy"}
},
{
"type": [ {
"coding": [ {
"system": "http://hl7.org/fhir/v3/ParticipationType",
"code": "ATND"
}],
"text": "Attending Physician"
}],
"individual": {"display": "RFoo, JFoo L"}
}
],
"period": {
"start": "2015-10-27T13:59:00+00:00",
"end": "2017-02-17T09:39:07+00:00"
},
"reason": [ {
"coding": [ {
"system": "http://www.ihtsdo.org/snomed-ct",
"code": "33962009"
}],
"text": "ECHOCARDIOGRAM"
}],
"hospitalization": {"dischargeDiagnosis": [ {
"reference": "#Reason",
"display": "DWA-Discharged with Approval"
}]},
"location": [{"location": {"display": "SPH 4th Foo Dr’s Clinic"}}],
"serviceProvider": {"display": "Foo_foo"}
}}
]
}发布于 2017-10-23 18:08:34
错误消息“无效字符在给定的编码中”没有出现在FHIR .NET应用程序接口的源代码中,但是它在.NET XmlReader的上下文中出现在google上。因此,我的第一个猜测是,json可以正确解析(任何Unicode字符都可以包含在json字符串中),然后转换为XML,其中的字符不会被转义。然后,当BizTalk处理XML时,它就会遇到麻烦。
这很有趣,因为我只使用XMLXML库来序列化成.NET,所以它不应该生成非法的XML.也许-and这是在XML端--有没有一个设置来指示BizTalk中的BizTalk管道中使用的编码?
https://stackoverflow.com/questions/46834375
复制相似问题