ASP.NET Core Newtonsoft.Json设置全局输出风格
ASP.NET Core 2.x
在Startup.cs中设置
/// <summary>
/// This method gets called by the runtime. Use this method to add services to the container.
/// </summary>
/// <param name="services"></param>
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddJsonOptions(options =>
{
//设置输出snake_case风格
options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() };
//设置输出camelCase风格
// options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new CamelCaseNamingStrategy() };
//默认为PascalCase风格
//options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new DefaultNamingStrategy() };
//包含时区信息
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
//包含Null值的序列化
options.SerializerSettings.NullValueHandling = NullValueHandling.Include;
});
}
ASP.NET Core 3.x
在Startup.cs中设置
/// <summary>
/// This method gets called by the runtime. Use this method to add services to the container.
/// </summary>
/// <param name="services"></param>
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers()
.AddNewtonsoftJson(options =>
{
//设置输出snake_case风格
options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() };
//设置输出camelCase风格
// options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new CamelCaseNamingStrategy() };
//默认为PascalCase风格
//options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new DefaultNamingStrategy() };
//包含时区信息
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
//包含Null值的序列化
options.SerializerSettings.NullValueHandling = NullValueHandling.Include;
});
}
另外需要说一下Swagger的支持,在ASP.NET Core 3.0之前,Swagger默认的序列化工具使用Newtonsoft.Json,所以配置了Newtonsoft.Json的全局输出风格后Swagger界面的输出也会一致。但是在ASP.NET Core 3.0时,由于ASP.NET Core 3.x内置了System.Text.Json,Swagger(Swashbuckle>=5.0.0) 默认使用System.Text.Json进行序列化操作,所以如果想使Swagger继续使用Newtonsoft.Json需要额外配置
- 引入
Swashbuckle.AspNetCore.Newtonsoft
在Startup.cs中
/// <summary>
/// This method gets called by the runtime. Use this method to add services to the container.
/// </summary>
/// <param name="services"></param>
public void ConfigureServices(IServiceCollection services)
{
//Swagger序列化操作使用Newtonsoft.Json
services.AddSwaggerGenNewtonsoftSupport();
}