【问题标题】:Convert fhir between XML and Json在 XML 和 Json 之间转换 fhir
【发布时间】:2020-08-11 20:45:04
【问题描述】:

有没有办法通过独立于所使用的 FHIR 版本的方式将 fhir 包从 json 转换为 xml?

我认为 firely 的 .net fhir api 可以做到这一点,但任何给定版本的 api 似乎都特定于 FHIR 的某个版本。

【问题讨论】:

    标签: hl7-fhir fhir-net-api


    【解决方案1】:

    问题在于 FHIR Bundle(或任何资源)隐含地总是有一个版本。理由是每个 FHIR 版本都有(或可以有)不同的底层数据模型。 但是,可以使用 .NET FHIR API(特别是包 https://www.nuget.org/packages/Hl7.Fhir.Serialization)以最小的版本差异进行转换。 以下代码使用与版本无关的ISourceNode (http://docs.simplifier.net/fhirnetapi/parsing/isourcenode.html) 进行转换

    using Hl7.Fhir.ElementModel;
    using Hl7.Fhir.Serialization;    
    
    var xml = "<Patient xmlns=\"http://hl7.org/fhir\"><identifier><use value=\"official\" /></identifier></Patient>";
    var patientNode = FhirXmlNode.Parse(xml);
    var typedElement = patientNode.ToTypedElement();
    var json = typedElement.ToJson();
    

    上面的代码有一个问题,VS 会告诉你。使用不带参数的ToTypedElement() 是危险的,因为忽略版本是危险的。但它在许多情况下都可以使用,如果它对你来说足够好,那可能就是要走的路。

    更安全的解决方案是使用相同的代码,但另外使用所谓的IStructureDefinitionSummaryProvider(抱歉命名;)来为 API 提供特定的版本信息。此接口的实现可以在特定于版本的 API 库中找到,例如https://www.nuget.org/packages/Hl7.Fhir.R4.

    using Hl7.Fhir.ElementModel;
    using Hl7.Fhir.Serialization;
    using Hl7.Fhir.Specification;
    
    var xml = "<Patient xmlns=\"http://hl7.org/fhir\"><identifier><use value=\"official\" /></identifier></Patient>";
    var patientNode = FhirXmlNode.Parse(xml);
    var summaryProvider = new PocoStructureDefinitionSummaryProvider();
    var typedElement = patientNode.ToTypedElement(summaryProvider);
    var json = typedElement.ToJson();
    

    您可以根据您正在读取的输入的某些属性注入这些PocoStructureDefinitionSummaryProviders。这就是我们在Vonk FHIR server 中的做法。

    【讨论】:

      【解决方案2】:

      FHIR java 验证器可以为任何版本执行此操作。这可能是合适的,这取决于你需要使用它

      【讨论】:

      • 我可能不得不转向那个。我们的环境主要是 .net,所以希望能走这条路
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      相关资源
      最近更新 更多