You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

ASP.NET Core 3.1中System.Text.Json反序列化NodaTime Instant问题

解决ASP.NET Core 3.1中System.Text.Json序列化Noda Time Instant为空对象的问题

这个问题其实挺典型的——ASP.NET Core 3.1默认用的System.Text.Json序列化器,本身并没有内置对Noda Time类型(比如你用的Instant)的支持,它不知道该怎么把Instant转换成JSON格式,最后只能输出空对象{}

解决起来很简单,分两步走就行:

  1. 安装官方适配的NuGet包
    打开你的NuGet包管理器,安装NodaTime.Serialization.SystemTextJson包,这是Noda Time官方提供的专门适配System.Text.Json的扩展,就是用来解决这类序列化不兼容问题的。

  2. 在Startup中配置Json序列化选项
    找到Startup.cs里的ConfigureServices方法,修改AddControllers()的配置,添加Noda Time的序列化支持:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers()
            .AddJsonOptions(options =>
            {
                // 为所有Noda Time核心类型注册序列化转换器,包括Instant
                options.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
            });
        // 其他服务配置代码...
    }
    

    这里的ConfigureForNodaTime方法会自动帮你注册好InstantLocalDateTime等Noda Time类型的序列化/反序列化规则,默认会把Instant序列化为符合ISO 8601标准的字符串(比如"2024-05-20T14:30:00Z"),完全满足API接口的常见需求。

配置完成后重启你的API项目,再请求接口就能看到createDtlastmodDt正确返回你存入的日期数据了。

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

火山引擎 最新活动