如何让Newtonsoft在ASP.Net核心Web API中反序列化JSON datetime时忽略时区
我有一个ASP.NETCore5WebAPI后端和一个Angular10前端。 每当前端向API发送日期时,它都会发送带有时区的日期,例如:如何让Newtonsoft在ASP.Net核心Web API中反序列化JSON datetime时忽略时区,json,asp.net-core,json.net,deserialization,webapi,Json,Asp.net Core,Json.net,Deserialization,Webapi,我有一个ASP.NETCore5WebAPI后端和一个Angular10前端。 每当前端向API发送日期时,它都会发送带有时区的日期,例如: **Thu Apr 29 2021 00:00:00 GMT+0200 (South Africa Standard Time)** 这是用户设备的时区。 当API接收到它时,Newtonsoft反序列化程序将其转换为UTC。现在,这一切都很好,因为API应该处理UTC日期,并且应该将日期保存到数据库(MySql)中作为UTC。但问题是,当不涉及时间成
**Thu Apr 29 2021 00:00:00 GMT+0200 (South Africa Standard Time)**
这是用户设备的时区。
当API接收到它时,Newtonsoft反序列化程序将其转换为UTC。现在,这一切都很好,因为API应该处理UTC日期,并且应该将日期保存到数据库(MySql)中作为UTC。但问题是,当不涉及时间成分时(如上例所示,时间成分为午夜(00:00:00)-不是因为它具体指的是午夜,而是因为不涉及时间),然后,当Newtonsoft将其转换为UTC时,它减去2小时时区,因此日期可以追溯到1天(2021年4月29日00:00:00变为2021年4月28日22:00:00)
我研究了如何让Newtonsoft停止这样做,因此在我的Startup.cs中包含了以下代码:
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Local
};
...
}
我尝试使用DateTimeZoneHandling.Local、DateTimeZoneHandling.Unspecified、DateTimeZoneHandling.Utc和DateTimeZoneHandling.RoundtripKind(这显然是默认值),但没有任何区别
知道我哪里出错了吗
理想情况下,我希望Newtonsoft只在没有时间成分的情况下(即时间为00:00:00)忽略时区,否则应该考虑时区。我不确定这是否可能。。。
谢谢这回答了你的问题吗?最简单的方法是反序列化到
DateTimeOffset
,然后在选择时从中选择DateTime
,转储时区。