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

.NET 6升级后Newtonsoft JSON空值处理配置问题

.NET 6中Newtonsoft.Json反序列化单独配置NullValueHandling的方案

要实现反序列化时忽略空属性,序列化(响应输出)时保留空属性的效果,无需全局统一设置NullValueHandling,可以通过以下两种方式分开配置:

方法一:全局层面拆分输入/输出配置

在Program.cs中配置Newtonsoft.Json时,分别调整输入格式化器(负责反序列化)和输出格式化器(负责序列化)的设置:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 全局设置序列化(响应输出)时保留空属性(默认即为Include,可显式声明)
        options.SerializerSettings.NullValueHandling = NullValueHandling.Include;

        // 找到Newtonsoft的输入格式化器,单独修改反序列化设置
        var inputFormatter = options.InputFormatters.OfType<NewtonsoftJsonInputFormatter>().FirstOrDefault();
        if (inputFormatter != null)
        {
            // 复制全局配置并修改反序列化的NullValueHandling
            var deserializationSettings = inputFormatter.SerializerSettings.Clone();
            deserializationSettings.NullValueHandling = NullValueHandling.Ignore;
            inputFormatter.SerializerSettings = deserializationSettings;
        }
    });

这种方式能一次性全局生效,既解决模型绑定时空值传入的问题,又保证响应JSON保留空属性。

方法二:针对单个模型/属性局部配置

如果仅需对特定模型或属性调整行为,可以直接在模型类上使用JsonProperty特性单独指定反序列化的规则,序列化时继承全局默认的保留空属性设置:

public class YourModel
{
    // 反序列化时忽略空值,序列化时保留该属性(即使为空)
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string? RequiredProperty { get; set; }

    // 其他属性继承全局设置
    public string? OptionalProperty { get; set; }
}

这种方式灵活性更高,适合仅需局部调整的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:16:09