Json序列化改变DataTime

时间:2017-06-26 16:44:40

标签: c# .net asp.net-mvc autorest

我目前正在从.net MVC5网站调用rest api,并使用AutoRest(0.17.3)从其余的api swagger.json生成代码。

这一切都运行得很好但是当我使用put方法时,它会将其中一个字段的日期时间改变一个小时。我在自动生成的代码中找到了导致问题的位置:

   _requestContent = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(value, this.SerializationSettings);

似乎正在改变将对象序列化为Json的时间。

我已经在web.config中设置了文化,但我们仍然遇到同样的问题。

有谁知道如何解决这个问题?如果可能全局,那么我们不必更改自动生成的代码。否则,我们必须记住每次重新生成代码时都要进行此更改。

非常感谢

安迪

1 个答案:

答案 0 :(得分:0)

我认为您的数据时间值指定为本地时间(属性Kind等于DateTimeKind.Local)。这就是为什么这个值随时间变化而序列化的原因。如果将此属性更改为DateTimeKind.Utc,则数据值将被序列化而不会更改。见例:

var local = DateTime.Now;
var utc = DateTime.SpecifyKind(local, DateTimeKind.Utc);

var _requestContentLocal = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(local);
var _requestContentUTC = Microsoft.Rest.Serialization.SafeJsonConvert.SerializeObject(utc);

_requestContentLocal    "\"2017-06-29T18:19:32.6704837+03:00\"" 
_requestContentUTC  "\"2017-06-29T18:19:32.6704837Z\""