2015-12-16 80 views
1

我正在使用Fhir-net-api和DSTU2來將JSON對象解析爲C#模型。一切正常,但我不能訪問原因資源類型的元素程序。作爲一個例子,我解析以下JSON對象使用FhirParser的過程模型:無法訪問FHIR模型中的Procedure.reason

{ 
"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" } ] 
} 

並將所生成的對象還具有以下條目(摘錄): Procedure

我可以訪問Report[0].Reference得很好,但它不會與Reason.Reference一起使用。我的JSON對象中的數據是否錯誤? 我見過原因型Hl7.Fhir.Model.Element型Hl7.Fhir.Model.ResourceReference報告的。有沒有辦法改變原因hl7.Fhir.Model.ResourceReference然後訪問參考元素?

將不勝感激的任何提示。謝謝。

問候,

Trammy

回答

1

正如您所注意到的reasonReference類型是Model.Element,而report類型爲ResourceReference。這種差異起源於FHIR specification for Procedure中這些元素的定義,其中report固定爲類型Reference,但reason(或者更確切地說reason[x])可以是CodeableConceptReference。我們已經創建了一個類型爲Model.Element的C#成員(該成員可以是多種類型的元素(我們稱之爲「選擇元素」,並且可以識別它們,因爲它們的名稱以規範中的[x]結尾),因此我們創建了一個類型爲Model.Element Reference和CodeableConcept的基類)。

現在,根據您剛解析或收到的實例,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 
} 

當然,如果你確信你只能接收情況,其中的原因是ResourceReference,你可以直接做投:

var myReference = (ResourceReference)Reports[0].Reference; 
// myReference.Reference and myReference.Display will now work 
+0

大。我的目標應該足夠可行。我沒有想到簡單地將對象轉換爲所需的類型。謝謝 – ftramnitzke