【问题标题】:Json serializing changing DataTimeJson 序列化更改日期时间
【发布时间】:2017-11-29 13:55:00
【问题描述】:

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

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

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

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

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

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

非常感谢

安迪

【问题讨论】:

  • 这是时区问题。服务器上的所有时间都应按 UTC 处理,并在浏览器中转换为本地时间。序列化程序可能会在序列化过程中自动将时间转换为 UTC。

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


【解决方案1】:

我相信您的数据时间值指定为当地时间(属性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\""  

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2012-08-30
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多