【发布时间】:2018-05-31 15:58:17
【问题描述】:
在我的 ASP.NET Core Web-API 项目中,我收到了对我的一个 API 控制器的 HTTP POST 调用。
在评估 JSON 负载并反序列化其内容时,Json.NET 偶然发现了 0001-01-01T00:00:00 的 DateTime 值,并且无法将其转换为 DateTimeOffset 属性。
我注意到该值可能应该代表 DateTimeOffset.MinValue 的值,但它缺少时区似乎会使反序列化器跳闸。我只能想象 DateTimeOffset.Parse 试图将其转换为主机当前时区,这导致 DateTimeOffset.MinValue 下溢。
该属性非常简单:
[JsonProperty("revisedDate", NullValueHandling = NullValueHandling.Ignore)]
public DateTimeOffset? RevisedDate { get; set; }
这是发送给客户端的响应:
{
"resource.revisedDate": [
"Could not convert string to DateTimeOffset: 0001-01-01T00:00:00. Path 'resource.revisedDate', line 20, position 44."
]
}
我正在使用 Newtonsoft.Json v11.0.2,目前在 UTC + 2(德国)。异常回溯和错误信息在这里:https://pastebin.com/gX9R9wq0。
我无法修复调用代码,所以我必须在我这边修复它。
但问题是:如何?
【问题讨论】:
-
无法复制,请参阅dotnetfiddle.net/krfPNn。也无法使用 Json.NET 版本 10 或 11.2 在 UTC-05:00 中重现。你在哪个时区?你使用的是什么版本的 Json.NET?
-
我正在使用 Newtonsoft.Json v11.0.2,目前在 UTC + 2(德国)。
-
好吧,如果问题只能在与 UTC 有正偏移的时区重现,那就太尴尬了。您能否在控制台应用程序中重现此情况并共享异常的完整
ToString()输出,包括异常类型、消息、回溯和内部异常(如果有)? -
@dbc 这是您的演示中的异常输出pastebin.com/iAuXaJN6
标签: c# json.net asp.net-core-mvc deserialization datetimeoffset