【发布时间】: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