与XML相比,JSON序列化非常慢

时间:2014-05-31 20:44:04

标签: asp.net-web-api

我有一个webapi服务,我需要从网络应用程序访问

如果我直接调用webapi url(例如/ api / scrccc / 32),它会在不到5秒的时间内返回数​​据,但是当从jquery调用时,它需要超过5分钟(!!!)分钟

我的ajax电话是

j$.ajax({
   type: "GET",
   url: '/api/scrccc/' + id + '?dt=' + new Date().getTime(),
   error: function (jqXHR, status, error) {
       //....         
   },
   success: function (data, status, jqXHR) {
       //....
   }
});

这种情况发生在javascript控制台(firebug)打开或关闭,以及Chrome和FF

任何人都知道为什么会这样?

修改

以下是Chrome中使用Jquery调用的时间:

Timimgs in Chrome - with jquery

以及Chrome中可以直接访问地址栏中的网址的时间

Timimgs in Chrome - direct url call

...还有带时间戳的浏览器中的timimgs

Timimgs in Chrome - direct url call with timestamp param

编辑 - 6月1日

我意识到从ajax和浏览器的地址栏调用webapi之间存在差异: - ajax调用请求响应为json - 浏览器请求响应为XML

所以我在Postman中测试了两个请求,使用了json和xml响应,结果让我感到困惑:xml响应请求花了1261 ms而json响应花费了47000 ms(!!!)

(Chrome控制台中显示的时间是使用本地IIS Express,而Postman中显示的最新时间是通过互联网在真实网络服务器上使用真实应用,这就是为什么它们不同,但规模仍然存在)

XML response

enter image description here

事实上,问题出在服务器端,正如一些人所建议的那样,但不是在提供数据的实际应用程序代码中,而是在序列化点。

我的Webapi是2.1(版本5.1.2)和Json.Net版本6.0.3(都是最新版本) 我没有使用任何特定json序列化程序的特殊设置,因此,据我所知,WebApi使用Json.Net。

知道什么可能导致序列化时间如此巨大的差异?

由于

2 个答案:

答案 0 :(得分:2)

首先,感谢所有花时间掠夺此事的人。 正如我在评论 @adreno 时发布的那样,问题在于首次访问时加载了一个昂贵的计算属性。

该属性属于BL中定义的类,已在各个地方使用,所以起初我没想过要检查它。

为什么通过XML序列化将该属性排除在序列化之外?我不知道,由于时间的限制,我没有时间或特别的兴趣进一步调查(因为它不是一个开放的api,我们没有&t; t需要XML输出)。

答案 1 :(得分:1)

你如何序列化JSON?,你正在使用什么库,如果你使用的是Jackson或你的框架正在使用的其他库,我会先尝试Gson。

像我说的那样渲染一个字符串

String myjson = "";
Gson gson = new Gson();
myjson = gson.toJson(myuser);//myuser is my java object

return myjson