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

System.Text.Json导致IActionResult HttpGet请求中可空属性丢失的原因?

可空整数属性序列化后消失的原因与解决方法

核心原因

System.Text.Json和Newtonsoft.Json的默认序列化行为存在关键差异:.NET 6中,System.Text.Json默认会忽略值为null的可空值类型属性,而Newtonsoft.Json默认会将这类null值属性序列化输出。你设置的IncludeFields是控制字段序列化的开关,和属性无关,因此不会对这个问题产生影响。

解决办法

有两种方式可以让null值的可空整数属性被正常序列化:

1. 全局配置(推荐)

在Program.cs里配置Json序列化选项,修改默认的忽略规则:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 所有null值属性都保留,不忽略
        options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.Never;
        
        // 或者更精准:只忽略非可空值类型的默认值(比如int的0),可空类型的null仍保留
        // options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault;
    });

注意:WhenWritingDefault更贴合多数业务场景,它会过滤掉非可空值类型的无意义默认值,但保留可空类型的null;Never则会保留所有null值属性,包括引用类型的null。

2. 属性单独配置

如果只需要针对某个特定属性生效,可以在属性上添加特性:

[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
public int? MyNullableIntProperty { get; set; }

额外排查点

确认你的属性是public访问修饰符,System.Text.Json默认只会序列化public属性——不过你提到后端运行正常,这个大概率不是问题,但可以快速确认下。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 16:12:09