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

如何在FHIR .NET API中支持资源的自定义成员?

如何在FHIR .NET API中支持自定义扩展字段(无需修改源码)

我正在对接一个带有资源自定义成员的FHIR服务器,收到的Patient资源示例如下:

<Patient xmlns='http://hl7.org/fhir'><hasSuperPower></hasSuperPower></Patient>

想知道怎么在FHIR .NET API中添加对这个额外标签的支持,让反序列化器能处理它并存入Patient对象。之前看到Mirjam Baltus的文章提到可以用分部类扩展模型类,但不确定是不是必须修改FHIR API源码重新编译?有没有不用修改源码、直接用NuGet提供的DLL的实现方式?


无需修改源码的完美方案

完全不用碰FHIR .NET API的源码,利用C#分部类的特性就能轻松实现,步骤很清晰:

1. 创建同命名空间的Patient分部类

在你自己的项目里新建一个C#类文件,定义和FHIR API中Patient类同名同命名空间的分部类,这样编译器会自动把两个类合并:

using Hl7.Fhir.Model;

namespace Hl7.Fhir.Model
{
    public partial class Patient
    {
        // 用[FhirElement]标记对应XML里的自定义标签
        [FhirElement("hasSuperPower")]
        public FhirBoolean HasSuperPower { get; set; }
    }
}

这里的[FhirElement]属性是FHIR .NET API内置的,括号里的名称必须和XML中的自定义标签完全匹配。如果你的字段是字符串类型,就用FhirString,数值类型用FhirDecimal,以此类推。

2. 配置反序列化器允许未知成员

默认的解析器会忽略未定义的字段,所以需要在初始化解析器时开启允许未知成员的选项:

// 初始化XML解析器并配置允许未知成员
var xmlParser = new FhirXmlParser(new ParserSettings
{
    AcceptUnknownMembers = true
});

// 反序列化XML字符串到Patient对象
var patient = xmlParser.Parse<Patient>(yourXmlContent);

// 访问自定义字段的值
bool? hasSuperPowerValue = patient.HasSuperPower?.Value;

原理说明

FHIR .NET API的官方模型类本身就是以分部类的形式编写的,这就是为了方便开发者在不修改源码的前提下扩展模型。你在自己项目中创建的分部类会和NuGet包中的类合并,完全兼容官方DLL,不需要重新编译任何源码。

复杂自定义字段的处理

如果你的自定义标签是嵌套的复杂结构,比如:

<Patient xmlns='http://hl7.org/fhir'>
  <superPower>
    <name>飞行</name>
    <level>3</level>
  </superPower>
</Patient>

你可以先定义对应的分部类:

namespace Hl7.Fhir.Model
{
    public partial class SuperPower : BackboneElement
    {
        [FhirElement("name")]
        public FhirString Name { get; set; }

        [FhirElement("level")]
        public FhirInteger Level { get; set; }
    }

    public partial class Patient
    {
        [FhirElement("superPower")]
        public SuperPower PatientSuperPower { get; set; }
    }
}

同样的方式配置解析器后,就能正常反序列化复杂结构了。


内容的提问来源于stack exchange,提问作者Beika Zhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:46:37