从Newtonsoft.Json迁移至System.Text.Json:Program.cs配置转换
将Newtonsoft.Json全局默认配置转换为System.Text.Json(.NET 6)
原Newtonsoft.Json配置解析
你原来的代码是设置全局默认的序列化/反序列化规则,包含三个核心配置:
- 序列化时忽略
null值 - 反序列化时忽略目标类型中不存在的成员
- 使用驼峰命名进行属性名称转换
对应System.Text.Json的实现
场景1:ASP.NET Core Web项目(API/MVC)
在.NET 6的Program.cs中,通过AddJsonOptions配置全局控制器的Json序列化规则,替换原JsonConvert.DefaultSettings:
var builder = WebApplication.CreateBuilder(args); // 配置控制器的Json序列化选项 builder.Services.AddControllers() .AddJsonOptions(options => { // 对应NullValueHandling.Ignore:序列化时忽略null值 options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; // 对应MissingMemberHandling.Ignore:反序列化时忽略不存在的属性(不抛出异常) options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; // 对应CamelCasePropertyNamesContractResolver:全局使用驼峰命名转换 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; }); var app = builder.Build(); // 其他中间件配置(如路由、授权等) app.MapControllers(); app.Run();
场景2:非Web项目(控制台、桌面应用等)
System.Text.Json没有类似JsonConvert.DefaultSettings的全局静态默认配置,你可以创建一个静态的配置实例复用:
// 定义全局Json配置(可放在Program.cs或单独的静态类中) public static class JsonGlobalOptions { public static readonly JsonSerializerOptions Default = new() { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, PropertyNameCaseInsensitive = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; } // 序列化使用示例 var json = JsonSerializer.Serialize(yourObject, JsonGlobalOptions.Default); // 反序列化使用示例 var obj = JsonSerializer.Deserialize<YourType>(json, JsonGlobalOptions.Default);
补充说明
PropertyNameCaseInsensitive:System.Text.Json默认是严格匹配属性名称大小写,开启这个选项后,反序列化时会忽略大小写差异,同时自动忽略目标类型中不存在的成员,对应Newtonsoft的MissingMemberHandling.Ignore。DefaultIgnoreCondition:除了WhenWritingNull,还有WhenWritingDefault(忽略默认值),可根据需求调整。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

