You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Firely .NET SDK构建NHS eReferral系统FHIR查询的参数问题

使用Firely .NET SDK构建符合NHS eRS规范的FHIR工作列表请求

我尝试用FirelyTeam的firely-net-sdk创建FHIR REST请求,调用NHS eReferral系统获取工作列表,目标JSON结构如下:

{"resourceType": "Parameters","meta": {"profile": ["https://fhir.nhs.uk/STU3/StructureDefinition/eRS-FetchWorklist-Parameters-1"]},"parameter": [{"name": "listType","valueCodeableConcept": {"coding": [{"system": "https://fhir.nhs.uk/STU3/CodeSystem/eRS-ReferralListSelector-1","code": "REFERRALS_FOR_REVIEW"}]}}]}

我编写的C#代码如下:

var url = "FHIR/STU3/ReferralRequest/$ers.fetchworklist";

var bundle = new Parameters();

bundle.Meta = new Meta();

bundle.Meta.Profile = new string[] { "https://fhir.nhs.uk/STU3/StructureDefinition/eRS-FetchWorklist-Parameters-1" };

bundle.Add("name", new FhirString("listType"));

var parms = new Parameters()
    .Add("system", new FhirString("https://fhir.nhs.uk/STU3/CodeSystem/eRS-ReferralListSelector-1"))
    .Add("code", new FhirString("REFERRALS_FOR_REVIEW"));

bundle.Add("valueCodeableConcept", new Parameters().Add("coding",parms));

var response =  await _fhirClient.OperationAsync(new Uri(EndPointUrl + "FHIR/STU3/ReferralRequest"), "ers.fetchworklist", bundle);

但通过Fiddler抓包发现生成的JSON结构错误:

{"resourceType": "Parameters","meta": {"profile": ["https://fhir.nhs.uk/STU3/StructureDefinition/eRS-FetchWorklist-Parameters-1"]},"parameter": [{"name": "name","valueString": "listType"},{"name": "valueCodeableConcept","resource": {"resourceType": "Parameters","parameter": [{"name": "coding","resource": {"resourceType": "Parameters","parameter": [{"name": "system","valueString": "https://fhir.nhs.uk/STU3/CodeSystem/eRS-ReferralListSelector-1"},{"name": "code","valueString": "REFERRALS_FOR_REVIEW"}]}}]}}]}

当前bundle.Add("name", new FhirString("listType"));无法正确生成name: listType的参数项,请问如何正确为参数添加基础值以生成符合要求的结构?


解决方案

错误核心是误解了Parameters资源的构造逻辑:每个参数项是一个包含name属性和对应值的Parameters.ParameterComponent,而非单独添加"name"和"valueCodeableConcept"作为独立参数。同时valueCodeableConcept对应的是CodeableConcept类型,不能用Parameters嵌套替代。

修正代码(完整写法)

var url = "FHIR/STU3/ReferralRequest/$ers.fetchworklist";

// 构建Parameters资源
var parameters = new Parameters();
parameters.Meta = new Meta
{
    Profile = new[] { "https://fhir.nhs.uk/STU3/StructureDefinition/eRS-FetchWorklist-Parameters-1" }
};

// 构造CodeableConcept及内部的Coding
var codeableConcept = new CodeableConcept();
codeableConcept.Coding.Add(new Coding
{
    System = "https://fhir.nhs.uk/STU3/CodeSystem/eRS-ReferralListSelector-1",
    Code = "REFERRALS_FOR_REVIEW"
});

// 创建单个参数项,绑定name和对应的值
var listTypeParam = new Parameters.ParameterComponent
{
    Name = "listType",
    Value = codeableConcept
};

// 将参数项加入Parameters集合
parameters.Parameter.Add(listTypeParam);

// 发起操作请求
var response = await _fhirClient.OperationAsync(
    new Uri(EndPointUrl + "FHIR/STU3/ReferralRequest"), 
    "ers.fetchworklist", 
    parameters);

简化链式写法(推荐)

Firely SDK提供了更简洁的链式调用方法,可直接生成符合要求的结构:

var parameters = new Parameters()
    .Add("listType", new CodeableConcept()
        .AddCoding("https://fhir.nhs.uk/STU3/CodeSystem/eRS-ReferralListSelector-1", "REFERRALS_FOR_REVIEW"));

parameters.Meta = new Meta { Profile = new[] { "https://fhir.nhs.uk/STU3/StructureDefinition/eRS-FetchWorklist-Parameters-1" } };

var response = await _fhirClient.OperationAsync(
    new Uri(EndPointUrl + "FHIR/STU3/ReferralRequest"), 
    "ers.fetchworklist", 
    parameters);

关键说明

  • 使用Parameters.Add(string name, DataType value)方法时,SDK会自动创建ParameterComponent,并完成Name赋值和Value绑定,无需手动拆分属性。
  • CodeableConcept.AddCoding可直接传入system和code,快速构造Coding对象,避免手动实例化集合的冗余操作。
  • 禁止嵌套Parameters对象,所有值类型需使用FHIR标准数据类型(如CodeableConcept、Coding)而非Parameters。

内容的提问来源于stack exchange,提问作者Richard Housham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 01:57:52