C# JsonResult有时会被截断
我使用的是MVC 3,有一个操作返回一个包含187个名称-值对的JsonResult(作为C# JsonResult有时会被截断,c#,asp.net-mvc,asp.net-mvc-3,jquery,C#,Asp.net Mvc,Asp.net Mvc 3,Jquery,我使用的是MVC 3,有一个操作返回一个包含187个名称-值对的JsonResult(作为列表),但从ajax调用接收的数据通常会被截断,无法解析 这总是通过JsonResult返回相同的187个项目,因此如果是长度问题,我认为每次都会失败。行动如下: [HttpPost] public JsonResult GetAllMetrics() { var metrics = metric.GetAllMetrics(); return Json(me
列表
),但从ajax调用接收的数据通常会被截断,无法解析
这总是通过JsonResult返回相同的187个项目,因此如果是长度问题,我认为每次都会失败。行动如下:
[HttpPost]
public JsonResult GetAllMetrics()
{
var metrics = metric.GetAllMetrics();
return Json(metrics);
}
这是jQuery ajax调用:
$.ajax({
url: urlGetAllMetrics,
type: 'POST',
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (ajaxData) {
if (ajaxData && ajaxData.length > 0) {
//populate data here
}
},
error: function (msg) {
alert(msg);
}
});
返回到ajax调用的结果有时会被切断,看起来实际上在两个不同的位置被切断。有哪些可能的原因
我还想指出,当我使用Fiddler捕获流量时,它每次都能工作,而不会截断返回的数据(我现在还不知道为什么)。当我不使用Fiddler时,我经常在ajax中收到一个错误,因为它无法将字符串解析为json。数据是一个具有值和文本字符串属性的数组。返回的文本只会被截断:
...,{"Value":"h12","Text":"h12 name goes here"},{"Val
由于
maxJsonLength
属性的默认值(102400-100kb),它将被截断。尝试在web.config中更改它:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
我想不出这个问题的解决方案,所以 我使用webHttpBinding添加了一个WCF服务,如我在服务类上设置了以下属性的答案所示:
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
并确保将DataContract和DataMember属性添加到基础类:
[DataContract]
public class OrientationData
{
[DataMember]
public string Value { get; set; }
[DataMember]
public string Text { get; set; }
}
我还将方法(现在界面上有一个OperationContract)切换为:
公共列表GetAllMetrics()
{
var metrics=metric.GetAllMetrics();
回报指标;
}
我希望我有一个更好的答案,但如果其他人遇到这个问题,这是一种解决方法。当然,我敢打赌,切换到MVC4也会像另一篇文章中提到的那样解决问题。谢谢你的建议,但这对我不起作用。文本仍在被截断。因为它在某些时候确实有效,所以我认为这不是长度问题。但我相信奇怪的事情发生了,是吗?然后我敢打赌这是对内部使用的
JavaScriptSerializer
设置的限制。尝试实现这个答案中的代码
public List<OrientationData> GetAllMetrics()
{
var metrics = metric.GetAllMetrics();
return metrics;
}