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.Element 型で、Reportが Hl7.Fhir.Model.ResourceReference 型であることがわかりました。ReasonHl7.Fhir.Model.ResourceReferenceに変更してからReference要素にアクセスする方法はありますか?

ヒントをいただければ幸いです。ありがとう。

よろしく、

トラミー

4

1 に答える 1

2

お気づきのように、 のタイプはreasonReferenceis ですがModel.Element、 のタイプはreportisResourceReferenceです。この違いは、Procedure の FHIR 仕様におけるこれらの要素の定義に端を発しています。ここで、reportは型に固定されていますReferenceが、reason(というよりも) aまたは a のreason[x]いずれかになります 。 CodeableConceptReference

要素が複数の型を持つことができる場合 (これを「選択要素」と呼びます[x]。仕様では名前が で終わるため、認識できます)、型の C# メンバーを作成しました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
}

もちろん、reason が ResourceReference であるインスタンスのみを受け取ることができると確信している場合は、直接キャストを行うことができます。

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