C# 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

我使用的是MVC 3,有一个操作返回一个包含187个名称-值对的JsonResult(作为
列表
),但从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;
    }