提问人:mcont 提问时间:11/15/2023 更新时间:11/15/2023 访问量:19
如何使用NodaTime和'System.Text.Json'反序列化没有最终Z的'Instant'?
How to deserialize an `Instant` without the final Z with NodaTime and `System.Text.Json`?
问:
我需要使用 反序列化 JSON 字符串。NET包含UTC的日期时间,但我无法使用NodaTime转换器,因为字符串缺少最终时间(即使它是UTC)。System.Text.Json
Instant
Z
我正在使用以下代码:
public record Item(Instant date);
var options = new JsonSerializerOptions()
.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
var item = JsonSerializer.Deserialize<Item>(options);
我收到以下错误:
---> System.Text.Json.JsonException: Cannot convert value to NodaTime.Instant
---> NodaTime.Text.UnparsableValueException: The value string does not match a quoted string in the pattern. Value being parsed: '2023-10-20T10:10:22^'. (^ indicates error position.)
答:
-1赞
mcont
11/15/2023
#1
解决方案是手动构建预期格式的转换器:
var options = new JsonSerializerOptions
{
Converters =
{
new NodaPatternConverter<Instant>(InstantPattern.CreateWithInvariantCulture("uuuu-MM-ddTHH:mm:ss"))
}
};
如果您想使用另一种类型(例如默认转换器不支持的格式)执行此操作,则类似的事情:LocalDateTime
var options = new JsonSerializerOptions
{
Converters =
{
new NodaPatternConverter<LocalDateTime>(LocalDateTimePattern.CreateWithInvariantCulture("uuuu-MM-dd HH:mm:ss"))
}
};
评论