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

ASP.NET Core 6中配置JSON序列化DateTime格式并接入DI供控制器使用的方法

在ASP.NET Core 6中配置JSON序列化的DateTime格式并接入DI容器

在ASP.NET Core 6里,虽然移除了传统的Startup.cs和ConfigureServices()方法,但配置JSON序列化(包括DateTime格式)的思路和3.x版本是一致的,只是语法适配了顶级语句的新写法。下面分几种场景给你详细说明:

1. 直接为控制器配置自定义DateTime序列化(最常用)

这是最直接的方式,和你之前3.x的写法逻辑一致,只是在Program.cs里通过builder.Services来配置:

var builder = WebApplication.CreateBuilder(args);

// 注册控制器服务并配置JSON序列化选项
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 添加你的自定义DateTime转换器
        options.JsonSerializerOptions.Converters.Add(new DateTimeConverterForCustomStandardFormatR());
        
        // 还可以添加其他序列化配置,比如:
        // options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        // options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
    });

var app = builder.Build();

// 配置中间件管道
app.UseHttpsRedirection();
app.UseAuthorization();

app.MapControllers();

app.Run();

这样配置后,所有控制器的JSON序列化/反序列化都会自动使用这个带自定义DateTime格式的配置。

2. 将JsonSerializerOptions注册到DI容器(供全局复用)

如果你的项目里除了控制器,还有其他服务需要用到相同的JSON序列化配置,可以把JsonSerializerOptions实例注册到DI容器中:

第一步:抽离通用配置逻辑

先把序列化配置写成一个独立的方法,方便复用:

private static void SetupJsonSerializerOptions(JsonSerializerOptions options)
{
    options.Converters.Add(new DateTimeConverterForCustomStandardFormatR());
    // 其他通用配置
    options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
    options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
}

第二步:同时配置控制器和DI注册

var builder = WebApplication.CreateBuilder(args);

// 为控制器配置JSON选项
builder.Services.AddControllers()
    .AddJsonOptions(options => SetupJsonSerializerOptions(options.JsonSerializerOptions));

// 将配置好的JsonSerializerOptions注册为单例服务
builder.Services.AddSingleton<JsonSerializerOptions>(sp =>
{
    var options = new JsonSerializerOptions();
    SetupJsonSerializerOptions(options);
    return options;
});

// 后续中间件和启动逻辑...
var app = builder.Build();
// ...

之后你就可以在任何服务中通过构造函数注入JsonSerializerOptions来使用统一的配置了。

3. 当自定义转换器需要依赖其他服务时

如果你的DateTimeConverterForCustomStandardFormatR需要依赖DI中的其他服务(比如读取配置文件、日志服务等),可以先把转换器注册为服务,再在配置中从DI获取:

var builder = WebApplication.CreateBuilder(args);

// 先注册自定义转换器为单例服务
builder.Services.AddSingleton<DateTimeConverterForCustomStandardFormatR>();

// 配置控制器的JSON选项时,从DI获取转换器实例
builder.Services.AddControllers()
    .AddJsonOptions((serviceProvider, options) =>
    {
        var dateTimeConverter = serviceProvider.Services.GetRequiredService<DateTimeConverterForCustomStandardFormatR>();
        options.JsonSerializerOptions.Converters.Add(dateTimeConverter);
    });

// 后续启动逻辑...

这种方式能保证你的转换器可以正常使用DI注入的依赖,避免手动实例化时的依赖缺失问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:32:36