C# 向Web API控制器发送ISO格式的日期时出现日期值问题

C# 向Web API控制器发送ISO格式的日期时出现日期值问题,c#,angularjs,datetime,asp.net-web-api2,C#,Angularjs,Datetime,Asp.net Web Api2,我正在使用Angular资源将JSON格式的数据发布到我的Web API控制器。post包含一个日期字段,我在其中传递ISO、UTC格式的日期值,如下所示: 2016-05-01T07:00:00.000Z 但是,当我在对象到达Web API控制器时检查该对象时,日期值将转换为不正确的DateTime值: 5/1/2016 7:00:00 AM 何时应该: 5/1/2016 12:00:00 AM 如果我错了,请纠正我,但我认为值应该是这个,因为如果我执行语句DateTime.Parse(

我正在使用Angular资源将JSON格式的数据发布到我的Web API控制器。post包含一个日期字段,我在其中传递ISO、UTC格式的日期值,如下所示:

2016-05-01T07:00:00.000Z
但是,当我在对象到达Web API控制器时检查该对象时,日期值将转换为不正确的
DateTime
值:

5/1/2016 7:00:00 AM
何时应该:

5/1/2016 12:00:00 AM
如果我错了,请纠正我,但我认为值应该是这个,因为如果我执行语句
DateTime.Parse(“2016-05-01T07:00:00.000Z”)我得到以下值:
5/1/2016 12:00:00 AM

我已经阅读了互联网上的各种帖子,包括SO,但还没有找到一个解决方案,以ISO格式发布日期,并成功地将其转换为正确的日期时间值

我所尝试的:

我尝试过各种方法,比如在我的
WebApiConfig.cs
文件中添加以下设置:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
config.Formatters.JsonFormatter.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;
我还尝试了一个修复,在我的
WebApiConfig.cs
文件中添加了以下行:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
config.Formatters.JsonFormatter.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;
我的Web.config的这一行:

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US"/>

我知道我可以将保存DateTime值的属性更改为字符串,并使用从ISO日期值生成DateTime值的
DateTime.Parse(dateTimeString)
方法,但我希望避免在模型中指定了许多DateTime对象的应用程序中这样做


SO上的大多数帖子都必须处理
DateTime
对象的响应格式不正确的问题,但我只是在发送请求时没有找到问题的答案。

可能是您在本地时间查看它,因为您似乎是以UTC的形式发送的。@Darroll我曾有过同样的想法,所以我尝试了类似这样的方法,
myDateTime.TouniVersaTime()
产生了
5/1/2016 7:00:00 AM
,使用
ToLocalTime()
产生了
5/1/2016 12:00:00 AM
,这也不正确。让我相信有什么不对的是,如果我执行以下语句:
DateTime.Parse(“2016-05-01T07:00:00.000Z”)
我得到了一个
DateTime
值,即
5/1/2016 12:00:00 AM
,这是我所期望的。可能是您在本地时间查看它,因为它看起来是以UTC的形式发送的。@Darroll我曾有过同样的想法,所以我尝试了类似的方法,
myDateTime.ToUniversalTime()
产生的值为
5/1/2016 7:00:00 AM
,使用
ToLocalTime()
产生的
5/1/2016 12:00:00 AM
也不正确。让我相信有什么不对的是,如果我执行以下语句:
DateTime.Parse(“2016-05-01T07:00:00.000Z”)
我得到了一个
DateTime
5/1/2016 12:00:00 AM
,这是我所期望的。