提问人:Skami 提问时间:9/30/2019 最后编辑:Heretic MonkeySkami 更新时间:9/14/2023 访问量:2574
.NET Core System.Text.Json 失败,并显示最小日期时间和 UTC 偏移量
.NET Core System.Text.Json fails with min datetime and UTC offset
问:
我一直在从 2.2 迁移到 3.0,到目前为止,一切都非常顺利,但是当用新的 System.Text.Json 替换 Newtonsoft 时,我遇到了以下问题。
尝试使用 UTC 偏移量反序列化 DateTime 最小值时,它会引发以下异常
未处理的异常。System.Text.Json.JsonException:JSON 值 无法转换为 System.DateTime。路径:$。创建日期 | 行号:2 |BytePositionInLine:43
例:
using System;
using Newtonsoft.Json;
class Program
{
static void Main(string[] args)
{
var json = "{\"MyDateTime\": \"0001-01-01T00:00:00+01:00\"}";
var newtonDeserialized = JsonConvert.DeserializeObject<Class>(json);
//Bad things happen here.
var systemDeserialized = System.Text.Json.JsonSerializer.Deserialize<Class>(json);
Console.WriteLine(newtonDeserialized.MyDateTime);
Console.WriteLine(systemDeserialized.MyDateTime);
}
}
class Class
{
public DateTime MyDateTime {get; set;}
}
在线示例可以在这里找到 Fiddle.
我想我可以编写自己的 DateTime 序列化器,但必须有一种更简单/更干净的方法来完成 Newtonsoft 所做的,而无需任何配置。
这发生在 3.0.100、3.1.500、5.0.100、6.0.100 和 7.0.100 上
答: 暂无答案
评论
0001-01-01T00:00:00+00:00
0001-01-01T00:00:00+01:00
DateTime
DateTimeOffset
DateTimeOffset
DateTime
DateTimeUtils.TryParseDateTimeIso()。
"0001-01-01T00:00:00+01:00"
DateTime.MinValue