将UTC时间字符串反序列化为本地时间
本文关键字:时间 字符串 UTC 反序列化 | 更新日期: 2023-09-27 18:05:33
我的问题与此类似:Asp.net WebApi将UTC时间字符串反序列化为本地时间
除了我使用([FromBody] dtoWithTime)在我的控制器方法
控制器调用看起来像
public JsonResult DiscoverProject([FromBody] dtoWithTime dto) {}
where
[Serializable]
public class dtoWithTime
{
public DateTime? dateName { get; set; }
}
请求以POST的形式传入,带有这些标头/数据(取自fiddler)
accept: application/json
content-type: application/json
content-length: 281
Connection: keep-alive
{"dateName":"2014-05-31T00:00:00.000Z"}
当日期进入控制器时,它变成了2014-05-30 20:00:00
我希望日期以Utc类型从UI发送过来。我能够在控制器中使用tuniversaltime()操作日期,这可以按照我想要的方式工作,除了检查此日期的SpecFlow测试失败。如果我能让序列化器保持Utc时间,那就好了。
我尝试使用的是JsonDotNetValueProviderFactory并在global.asax.cs中设置默认设置
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
这对我来说很有效,但破坏了我们应用程序中的许多序列化,包括枚举。
那么有什么方法可以装饰DateTime吗?或者为MVC json反序列化器设置一个默认的日期类型?
JSON是一种很棒的数据传输格式。不幸的是,有一件事它做得不好,那就是日期。要让它们在不同的平台上正常工作,存在许多变通方法。最终我们要做的是将所有JSON Date数据作为字符串发送。然后在控制器中,我们使用TryParse:
将它们转换为真正的DateTime类型DateTime myDate
if (DateTime.TryParse(inputJsonStringDate, out myDate))
//Success
else
//Not a valid date