C# Hl7.Fhir.R4接收Patient参数时Extension值为null问题
问题根因
该问题既不是接口方法缺少装饰器配置,也不是Hl7.Fhir.Model.Patient类型本身不支持反序列化,核心原因是ASP.NET Core默认的JSON序列化器不兼容FHIR规范定义的value[x]多态反序列化规则。
FHIR资源中Extension.Value属于抽象的DataType类型,对应JSON序列化时会根据实际值类型生成valueString/valueInt/valueCodeableConcept这类带类型后缀的属性名,HL7.Fhir库内置了专属转换器来识别这类命名规则、完成类型绑定,但系统默认的JSON序列化器只会查找名为Value的属性,匹配失败就会给Value字段赋值null。
修复方案
根据项目使用的JSON序列化器选择对应配置即可:
基于Newtonsoft.Json的项目
- 安装NuGet包
Hl7.Fhir.Serialization.NewtonsoftJson - 在服务注册阶段替换默认序列化配置,添加FHIR专用转换器:
builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.Converters.Add(new FhirNewtonsoftJsonConverter()); options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });
基于System.Text.Json的项目(.NET 5+推荐)
- 安装NuGet包
Hl7.Fhir.Serialization.SystemTextJson - 在JSON序列化配置中添加FHIR专属转换器:
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.Converters.Add(new FhirJsonConverter()); });
注意:你提供的请求示例中
valueInt字段传入了字符串类型的"10",不符合FHIR类型规范,valueInt对应整型值,需传入不带引号的数值10,否则即使配置正确转换器也会触发反序列化异常。
内容的提问来源于stack exchange,提问作者Juan David Cabezuelo
相关产品推荐
相关产品推荐

