【问题标题】:Knockout JS and ASP.NET Web Api Dates淘汰 JS 和 ASP.NET Web Api 日期
【发布时间】:2012-11-01 18:53:01
【问题描述】:

我正在努力争取在使用 ASP.NET Web API 时特别是在日期方面。我看过this question 和其他类似的,但我不喜欢给出的解决方案。

我有一个对象,里面有一些日期。当我从 Web Api 控制器返回它时,它被序列化如下:

{
    "AdjustmentId": "6b8bc63f-de50-4feb-b0e2-a10800cbc3c3",
    "PortfolioCode": 2461,
    "Description": "",
    "StartDate": "2012-11-13T00:00:00+02:00",
    "EndDate": "2012-11-13T00:00:00+02:00"
}

当我使用 ko.toJSON 从淘汰赛返回完全相同的 ViewModel 时,我得到以下信息:

{
    "AdjustmentId": "6b8bc63f-de50-4feb-b0e2-a10800cbc3c3",
    "PortfolioCode": 2461,
    "Description": "",
    "StartDate": "2012-11-12T22:00:00Z",
    "EndDate": "2012-11-12T22:00:00Z"
}

问题是控制器上的日期现在没有反序列化。对象在那里,但日期设置为 DateTime.Min。您还可以看到日期已经从 13 日午夜到 12 日晚上 10 点 - 这是因为时区更改。

谁能帮我解决这个问题?目前,作为一种解决方法,我正在使用 toISOString() 转换日期,但我希望在序列化中自动发生这种情况。

非常感谢您对此的任何帮助

【问题讨论】:

  • 你能准确解释你的问题是什么吗?您是否使用淘汰赛进行序列化并使用 WebAPI 进行反序列化?你的控制器是什么样子的?
  • 这篇文章给出了一个替换默认serializaer的好方法,让JSON默认使用ISO8601:hanselman.com/blog/…
  • @Tyrsius Json.NET 在 WebAPI 使用的版本中默认使用 ISO8601。这是大约 6 个月前在 Json.NET 中所做的更改。
  • @YoussefMoussaoui 啊,我没有意识到 JSON.net 已经是默认的了。很高兴知道。
  • 其中一个问题已经解决 - 我们发现 POST 上的 contentType 未设置为“application/json”。这意味着 WebAPI 控制器现在可以识别日期,但仍会减少 2 小时

标签: json knockout.js asp.net-web-api


【解决方案1】:

这里可能发生的情况是,当发布的日期/时间在服务器端被反序列化时,它是一种“UTC”,而不是“本地”。尝试在服务器端使用 .ToLocalTime() 将其转换为本地时间。

【讨论】:

  • 就是这样!!谢谢它的工作。现在的问题是一个更大的问题。如果印度的某人指定 15 日并且服务器位于美国,它将转换为当地时间,即 14 日。这是对还是错?从技术上讲,印度的第 15 位是美国的第 14 位(无论如何在一天中的某些时候),但无论时区如何,印度人是否意味着第 15 位。
猜你喜欢
  • 1970-01-01
  • 2013-12-27
  • 2013-01-24
  • 1970-01-01
  • 2013-07-09
  • 2023-03-20
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
相关资源
最近更新 更多