如何在C#中将JSON解析为HL7.FHIR.Model.MedicationDispense对象
将Bundle中的MedicationDispense JSON转换为HL7.FHIR.Model.MedicationDispense对象
你可以使用HL7官方的FHIR .NET SDK完成这个转换,具体步骤如下:
1. 安装依赖包
先在项目中安装Hl7.Fhir.R4 NuGet包,这是处理R4版本FHIR资源的核心工具包。
2. 解析JSON并转换对象
以下是完整的C#代码示例,实现从Bundle JSON中提取并转换为MedicationDispense对象:
using Hl7.Fhir.Model; using Hl7.Fhir.Serialization; // 你的Bundle JSON字符串 string bundleJson = @"{""resourceType"": ""Bundle"",""type"": ""document"",""entry"": [{""fullUrl"": ""/medicationdispense/c7c7e373-02c0-4ffc-9894-eee0de249a25/1000424"",""resource"": {""resourceType"": ""MedicationDispense"",""id"": ""1"",""extension"": [{""url"": ""uri:domedic:pharmacy:uuid"",""valueString"": ""dc28f64f-aef4-4d64-8cb5-b5a2020fdcdc""},{""url"": ""uri:domedic:prescription:renewals:left"",""valueInteger"": 24},{""url"": ""uri:domedic:medication:isoob"",""valueBoolean"": true}],""status"": ""on-hold"",""category"": {""coding"": [{""system"": ""http://terminology.hl7.org/CodeSystem/medicationrequest-category"",""code"": ""community""}],""text"": ""Includes requests for medications to be administered or consumed by the patient in their home (this would include long term care or nursing homes, hospices, etc.)""},""medicationCodeableConcept"": {""extension"": [{""url"": ""uri:domedic:medication:name"",""valueString"": ""SANDOZ FENTANYL""},{""url"": ""uri:domedic:medication:strength"",""valueString"": ""50 MCG-H""},{""url"": ""uri:domedic:medication:form"",""valueString"": ""TIMBRE""},{""url"": ""http://hl7.org/fhir/NamingSystem/ca-hc-din"",""valueString"": ""02327147""}],""coding"": [{""system"": ""http://hl7.org/fhir/NamingSystem/ca-hc-din"",""code"": ""02327147"",""display"": ""SANDOZ FENTANYL 50 MCG-H""}],""text"": ""SANDOZ FENTANYL 50 MCG-H""},""subject"": {""reference"": ""patient/c7c7e373-02c0-4ffc-9894-eee0de249a25"",""identifier"": {""use"": ""official"",""system"": ""uri:domedic:patient:uuid"",""value"": ""c7c7e373-02c0-4ffc-9894-eee0de249a25""}},""authorizingPrescription"": [{""reference"": ""medicationrequest/c7c7e373-02c0-4ffc-9894-eee0de249a25/1000424"",""identifier"": {""use"": ""usual"",""system"": ""uri:domedic:medicationrequest:number"",""value"": ""1000424""}}],""quantity"": {""value"": 2.0000},""whenPrepared"": ""2021-10-29T00:00:00+00:00"",""dosageInstruction"": [{""extension"": [{""url"": ""uri:domedic:dosage:discriminator"",""valueInteger"": 2},{""url"": ""uri:domedic:dosage:id"",""valueInteger"": 12042}],""sequence"": 1,""text"": ""1ERE RX EN DATE DU JOUR PUIS LES 2 AUTRES SERONT DES REN. POSTDATES. CESSATION FUTURE SUIVRA"",""timing"": {""event"": [""2021-10-29T08:00:00+00:00"",""2021-10-29T21:00:00+00:00""],""repeat"": {""boundsPeriod"": {""start"": ""2021-10-29T00:00:00+00:00""},""period"": 3.0,""periodUnit"": ""d""}},""doseAndRate"": [{""doseQuantity"": {""value"": 1.0000}}]},{""extension"": [{""url"": ""uri:domedic:dosage:discriminator"",""valueInteger"": 2},{""url"": ""uri:domedic:dosage:id"",""valueInteger"": 12042}],""sequence"": 2,""text"": ""1ERE RX EN DATE DU JOUR PUIS LES 2 AUTRES SERONT DES REN. POSTDATES. CESSATION FUTURE SUIVRA"",""timing"": {""event"": [""2021-10-30T08:00:00+00:00"",""2021-10-30T21:00:00+00:00"",""2021-10-31T08:00:00+00:00"",""2021-10-31T21:00:00+00:00""],""repeat"": {""boundsPeriod"": {""start"": ""2021-10-29T00:00:00+00:00""},""period"": 3.0,""periodUnit"": ""d""}},""doseAndRate"": [{""doseQuantity"": {""value"": 0.0000}}]}]}}]}"; // 创建JSON反序列化器,允许未知字段(适配自定义扩展) var fhirJsonParser = new FhirJsonParser(new ParserSettings { AcceptUnknownMembers = true }); // 先反序列化为Bundle对象 Bundle bundle = fhirJsonParser.Parse<Bundle>(bundleJson); // 从Bundle的entry中提取MedicationDispense资源 MedicationDispense dispense = bundle.Entry .FirstOrDefault(entry => entry.Resource is MedicationDispense) ?.Resource as MedicationDispense; // 使用转换后的对象 if (dispense != null) { Console.WriteLine($"药品状态: {dispense.Status}"); Console.WriteLine($"药品名称: {dispense.MedicationCodeableConcept.Text}"); }
关键注意点
AcceptUnknownMembers = true:你的JSON包含自定义扩展(如uri:domedic:*开头的字段),开启这个设置可以避免反序列化时因未知字段报错。- 如果Bundle中有多个MedicationDispense资源,可将
FirstOrDefault替换为Where来获取所有匹配的资源。
内容的提问来源于stack exchange,提问作者Dominic
相关产品推荐
相关产品推荐

