【发布时间】:2013-07-25 22:04:57
【问题描述】:
我已修改 WebAPI JSON.Net 序列化以使用 JavaScriptDateTimeConverter。计划是获取 jscript 日期对象而不是 ISO 8601 格式的字符串。但不幸的是,当我像这样使用 jquery 发布请求时:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "#UrlToService",
dataType: "json",
data: JSON.stringify(args),
success: function (data) {
callSucceeded(data);
},
error: function (jqXHR, textStatus, errorThrown) {
BJ.GenericWebAPIFailMethod(jqXHR);
}
});
error: 被输入,textStatus 是 parseerror 并且 errorThrown 给了我这个信息: SyntaxError:JSON.parse:意外关键字 返回 window.JSON.parse( 数据 ); jquery-1.7.2.js(第 564 行)
我返回的 json 对象的一部分看起来像:
"CreatedOn": Date {Thu Jul 25 2013 12:54:36 GMT+0200 (Central Europe Standard Time)}
"DisplayName": "Toronto, ON, Canada"
"Description": "12:54"
所以它确实按照要求格式化了我的日期,但稍后解析失败。
有什么想法可以实现我想要的吗?
附言这就是我在 global.asax(asp.net 网络表单)中的做法:
var formatters = GlobalConfiguration.Configuration.Formatters;
var jsonFormatter = formatters.JsonFormatter;
var settings = jsonFormatter.SerializerSettings;
settings.Converters.Add(new JavaScriptDateTimeConverter());
【问题讨论】:
-
为什么需要/想要在 Web API 中使用
JavaScriptDateTimeConverter?如果您将其保留为 ISO 8601 日期,则在 jQuery 反序列化响应后,您只需执行var date = new Date(data.CreatedOn);即可将日期字符串转换为 Date 对象。 -
问题是我们之前使用了 Web 方法,现在我们正在将该代码移动到 WebAPI。所以我不得不手动更改很多 jscript 代码。
-
在您迁移到 Web API 之前,您的旧 Web 方法是如何格式化日期的?
-
CreatedOn=/Date(1374749676000)/ 是之前返回的方式,我也可以在 WebAPI 中完成。当我用 WebAPI 返回它时,它保持不变。但是当它从 web 方法返回时,它被转换为 jscript 对象?!
-
其实 WebAPI 返回:"\/Date(1374749676000)\/" 问题出在哪里?
标签: jquery datetime asp.net-web-api json.net