2

我正在使用带有 DSTU2 的 Fhir-net-api 将 JSON 对象解析为 C# 模型。一切正常,除了我无法访问资源类型Procedure的Reason元素。例如,我使用FhirParser将以下 JSON 对象解析为 Procedure 模型:

{
"resourceType": "Procedure",
"identifier": [
    {
        "system": "https://mrd2.melanoma.org.au/fhir",
        "value": "100200199664802"
    }
],
"subject": { "reference": "Patient/10101000001733" },
"status": "completed",
"category": {
    "coding": [
        {
            "system": "https://mrd2.melanoma.org.au/fhir/RootType",
            "code": "3004"
        }
    ],
    "text": "Primary Surgery"
},
"bodySite": [
    {
        "coding": [
            {
                "system": "http://snomed.info/sct",
                "code": "7771000"
            }
        ],
        "text": "Left Forearm, Anterior"
    }
],
"reasonReference": { "reference": "/Condition/10106000001807" },
"performedDateTime": "1968-03-11",
"report": [ { "reference": "/DiagnosticReport/100200199664828" } ]
}

并且生成的对象具有以下条目(摘录): 过程

我可以Report[0].Reference正常访问,但它不适用于Reason.Reference. 我的 JSON 对象中的数据是否错误?我已经看到Reason的类型是Hl7.Fhir.Model.ElementReport的类型是 Hl7.Fhir.Model.ResourceReference。有没有办法将Reason更改为Hl7.Fhir.Model.ResourceReference然后访问Reference元素?

将不胜感激任何提示。谢谢。

问候,

电车

4

1 回答 1

2

正如您所注意到的,类型reasonReferenceModel.Element,而类型reportResourceReference。这种差异源于FHIR 规范中针对 Procedure的这些元素的定义,其中report固定为类型Reference,但reason(或者更确切地说reason[x])可以是 a CodeableConcept或 a Reference

当元素可以是多种类型时(我们称之为“选择元素”,您可以识别它们,因为它们的名称以[x]规范结尾),我们创建了一个类型的 C# 成员Model.Element(Reference 和可编码概念)。

现在,根据您刚刚解析或接收的实例,reason成员的内容可以是这两种类型之一。因此,您必须检查您的代码:

if(Reports[0].reason is ResourceReference)
{
    var reference = (ResourceReference)Reports[0].reason;
    //handle the case where this is a reference
    //doing reference.Reference will now work as expected
}
else if(Reports[0].reason is CodeableConcept)
{
    var concept = (CodeableConcept)Reports[0].reason;
    //handle the case where this is a codeable concept
}
else
{
    // Oops! Should not happen unless the standard has changed
}

当然,如果您确定只能接收 reason 为 ResourceReference 的实例,则可以直接进行转换:

var myReference = (ResourceReference)Reports[0].Reference;
// myReference.Reference and myReference.Display will now work
于 2015-12-16T10:38:15.067 回答