首页 > 解决方案 > 从 System.Text.Json 反序列化 NodaTime Instant

问题描述

我在一个 ASP.NET Core 项目和一个包含两个Instant属性的模型中使用 Noda Time。

public class Template
{
    //... redacted bits

    public Instant CreateDt { get; set; }
    public Instant LastmodDt { get; set; }
}

数据库中的信息正如我所期望的那样“开箱即用”。但是,通过 API取回值会返回空对象属性,如下所示:

{
    //... redacted bits

    "createDt": {},
    "lastmodDt": {}
}

我如何取回我输入的相同日期,或者至少我可以输入一些数据?

FWIW 我使用的是 ASP.NET Core 3.1,默认 System.Text.Json(不是 JSON.NET)。

编辑:删除了关于 PostgreSQL 的虚假注释,这些注释与问题无关。

标签: c#asp.net-corenodatime

解决方案


通过安装NodaTime.Serialization.SystemTextJson软件包并将其添加到我的Startup.cs

services.AddControllers()
    // the added bit:
    .AddJsonOptions(opt => opt.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));

我不得不从 github 上的其他用途对此进行逆向工程,因为我正在查看错误版本的 NodaTime 用户指南,就像傻瓜一样。干杯。


推荐阅读