从 System.Text.Json 反序列化 NodaTime Instant
Deserializing NodaTime Instant from System.Text.Json
我在 ASP.NET 核心项目和包含两个 Instant
属性的模型中使用 Noda Time。
public class Template
{
//... redacted bits
public Instant CreateDt { get; set; }
public Instant LastmodDt { get; set; }
}
数据库中的信息如我所料“开箱即用”。但是 通过 API returns 空对象属性取回 值,如下所示:
{
//... redacted bits
"createDt": {},
"lastmodDt": {}
}
如何取回我输入的同一日期,或者至少可以输入一些数据?
FWIW 我正在使用 ASP.NET Core 3.1,默认为 System.Text.Json(不是 JSON.NET)。
编辑:删除了与问题无关的关于 PostgreSQL 的虚假注释。
通过安装 NodaTime.Serialization.SystemTextJson
软件包并将其添加到我的 Startup.cs
:
,我可以通过评论中提到的帮助解决此问题
services.AddControllers()
// the added bit:
.AddJsonOptions(opt => opt.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));
我不得不从 github 上发现的其他用途中 reverse-engineer 这个,因为我一直在看错误版本的 NodaTime 用户指南,就像一个傻瓜。干杯。
我在 ASP.NET 核心项目和包含两个 Instant
属性的模型中使用 Noda Time。
public class Template
{
//... redacted bits
public Instant CreateDt { get; set; }
public Instant LastmodDt { get; set; }
}
数据库中的信息如我所料“开箱即用”。但是 通过 API returns 空对象属性取回 值,如下所示:
{
//... redacted bits
"createDt": {},
"lastmodDt": {}
}
如何取回我输入的同一日期,或者至少可以输入一些数据?
FWIW 我正在使用 ASP.NET Core 3.1,默认为 System.Text.Json(不是 JSON.NET)。
编辑:删除了与问题无关的关于 PostgreSQL 的虚假注释。
通过安装 NodaTime.Serialization.SystemTextJson
软件包并将其添加到我的 Startup.cs
:
services.AddControllers()
// the added bit:
.AddJsonOptions(opt => opt.JsonSerializerOptions.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb));
我不得不从 github 上发现的其他用途中 reverse-engineer 这个,因为我一直在看错误版本的 NodaTime 用户指南,就像一个傻瓜。干杯。