Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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
C# 将UTC时间字符串反序列化为本地时间_C#_Json_Asp.net Mvc 4_Datetime_Deserialization - Fatal编程技术网

C# 将UTC时间字符串反序列化为本地时间

C# 将UTC时间字符串反序列化为本地时间,c#,json,asp.net-mvc-4,datetime,deserialization,C#,Json,Asp.net Mvc 4,Datetime,Deserialization,我的问题与此类似: 除了我在控制器方法中使用([FromBody]dtoWithTime)之外 控制器调用看起来像 public JsonResult DiscoverProject([FromBody] dtoWithTime dto) {} 其中(我已经简化了这个示例。) 请求是以带有这些标题/数据的帖子的形式出现的(摘自fiddler) 当日期进入控制器时,它变成2014-05-30 20:00:00 我希望日期以Utc类型从UI发送的形式输入。我可以在控制器中使用ToUniver

我的问题与此类似:

除了我在控制器方法中使用([FromBody]dtoWithTime)之外

控制器调用看起来像

public JsonResult DiscoverProject([FromBody] dtoWithTime dto)    {}
其中(我已经简化了这个示例。)

请求是以带有这些标题/数据的帖子的形式出现的(摘自fiddler)

当日期进入控制器时,它变成2014-05-30 20:00:00

我希望日期以Utc类型从UI发送的形式输入。我可以在控制器中使用ToUniversalTime()操纵日期,这可以按照我的意愿工作,唯一的例外是检查此日期的SpecFlow测试失败。如果我能让序列化程序保持Utc时间,一切都会很好

我尝试的是使用和设置global.asax.cs中的默认设置

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
这对我来说很有效,但破坏了我们应用程序中的许多序列化,包括枚举


那么,还有什么可以装饰约会时间的吗?或者为MVC json反序列化程序设置默认日期类型?

json是传输数据的绝佳格式。不幸的是,它做得不好的一件事是日期。为了让它们在不同的平台上正常工作,存在许多变通方法。最终我们要做的是将所有JSON日期数据作为字符串发送。然后在我们的控制器中,我们使用TryParse将它们转换为实时类型:

DateTime myDate
if (DateTime.TryParse(inputJsonStringDate, out myDate))
    //Success
else
    //Not a valid date

什么版本的MVC?当日期进入控制器时,
是什么意思?是否有代码?您是否考虑过创建自定义模型活页夹?控制器调用和MVC版本更新问题将查看自定义模型活页夹。此应用程序中没有任何代码。我正在尝试避免向控制器添加代码,这样我们就不必知道何时向dto添加了日期时间。我们还有其他的应用程序可以传递日期字符串。
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
DateTime myDate
if (DateTime.TryParse(inputJsonStringDate, out myDate))
    //Success
else
    //Not a valid date