在C#的JSON序列化场景中,忽略Null值是常见的优化需求,既可以减小序列化后的数据体积,也能避免下游服务处理不必要的空值字段。System.Text.Json作为.NET官方推荐的JSON处理库,提供了灵活的Null值忽略配置能力,其中JsonIgnoreCondition是最核心的配置项,支持全局和局部两种配置方式。

JsonIgnoreCondition的作用与可选值
JsonIgnoreCondition是System.Text.Json中用于控制属性是否参与序列化的枚举,和Null值忽略相关的取值主要有以下几个:
- Never:无论属性值是否为Null,都参与序列化,这是默认行为
- WhenWritingNull:当属性值为Null时,忽略该属性的序列化
- WhenWritingDefault:当属性值为默认值(包括Null、值类型的默认值)时,忽略该属性的序列化
- Always:始终忽略该属性,无论值是什么
局部配置忽略Null值
如果只需要对个别属性忽略Null值,可以直接在属性上添加JsonIgnore特性,指定Condition为WhenWritingNull:
using System.Text.Json.Serialization;
public class UserInfo
{
public string UserName { get; set; }
// 当Age为Null时,序列化时忽略该字段
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public int? Age { get; set; }
// 当Address为Null时,序列化时忽略该字段
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string Address { get; set; }
}
测试序列化代码如下:
using System;
using System.Text.Json;
class Program
{
static void Main()
{
var user = new UserInfo
{
UserName = "张三",
Age = null,
Address = null
};
var json = JsonSerializer.Serialize(user);
Console.WriteLine(json);
// 输出结果:{"UserName":"张三"},Age和Address因为为Null被忽略
}
}
全局配置JsonIgnoreCondition忽略Null值
如果项目中大部分场景都需要忽略Null值,逐个给属性加特性会非常繁琐,这时候可以通过全局配置JsonSerializerOptions来实现。只需要在创建JsonSerializerOptions实例时,设置DefaultIgnoreCondition为JsonIgnoreCondition.WhenWritingNull即可:
using System.Text.Json;
using System.Text.Json.Serialization;
class Program
{
static void Main()
{
// 创建全局配置选项
var options = new JsonSerializerOptions
{
// 全局设置忽略Null值的属性
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
};
var user = new UserInfo
{
UserName = "李四",
Age = null,
Address = "北京市海淀区"
};
var json = JsonSerializer.Serialize(user, options);
Console.WriteLine(json);
// 输出结果:{"UserName":"李四","Address":"北京市海淀区"},Age为Null被忽略
}
}
public class UserInfo
{
public string UserName { get; set; }
public int? Age { get; set; }
public string Address { get; set; }
}
全局配置的扩展与注意事项
如果需要将全局配置应用到整个ASP.NET Core项目的接口返回中,可以在服务注册时配置System.Text.Json的全局选项:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System.Text.Json.Serialization;
var builder = WebApplication.CreateBuilder(args);
// 配置MVC的JSON序列化选项
builder.Services.AddControllers()
.AddJsonOptions(options =>
{
// 全局忽略Null值
options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
});
var app = builder.Build();
app.MapControllers();
app.Run();
需要注意的几点:
- 全局配置会对所有使用该options实例的序列化操作生效,如果有个别类需要特殊处理,可以在类或属性上添加
JsonIgnore特性覆盖全局配置 - WhenWritingDefault不仅会忽略Null值,还会忽略值类型的默认值,比如int类型的0、bool类型的false,如果需要只忽略Null不忽略默认值,应该选择WhenWritingNull而不是WhenWritingDefault
- 如果使用的是旧版本的.NET,可能需要确认System.Text.Json的版本是否支持对应的JsonIgnoreCondition枚举值
总结
C#中忽略JSON Null值的核心是通过JsonIgnoreCondition配置实现,局部场景可以用JsonIgnore特性单独设置,全局场景则通过JsonSerializerOptions的DefaultIgnoreCondition统一配置,后者能大幅减少重复代码,提升开发效率。开发者可以根据实际项目需求选择合适的配置方式,同时注意不同枚举值的差异,避免误忽略需要的默认值字段。
C#JSONJsonIgnoreConditionSystem_Text_JsonNull值忽略修改时间:2026-06-09 16:42:27