Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Newtonsoft在ASP.Net核心Web API中反序列化JSON datetime时忽略时区_Json_Asp.net Core_Json.net_Deserialization_Webapi - Fatal编程技术网

如何让Newtonsoft在ASP.Net核心Web API中反序列化JSON datetime时忽略时区

如何让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。但问题是,当不涉及时间成

我有一个ASP.NETCore5WebAPI后端和一个Angular10前端。 每当前端向API发送日期时,它都会发送带有时区的日期,例如:

**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
,转储时区。