Json Encode抛出异常json长度超出

时间:2014-06-11 05:49:10

标签: javascript asp.net-mvc json asp.net-mvc-4

我正在尝试从我的MVC控制器发送json,抛出异常,使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过maxJsonLength属性上设置的值。

我用Google搜索并在我的配置中添加了最大长度,也覆盖了我的json方法,没有任何效果。

这是我的网络配置 和我的方法,它抛出异常。  在appsetting

<add key="aspnet:MaxJsonDeserializerMembers" value="2147483647" />
<system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="2147483647">
        </jsonSerialization>

    </scripting>
  </system.web.extensions>

over ridden method

 protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding, JsonRequestBehavior behavior)
        {
            return new JsonResult()
            {
                Data = data,
                ContentType = contentType,
                ContentEncoding = contentEncoding,
                JsonRequestBehavior = behavior,
                MaxJsonLength = Int32.MaxValue
            };
        }

我的方法

 public JsonResult GetAttributeControls()
        {
            List<SelectListItem> attrControls;

            using (var context = new Context())
            {
                attrControls = context.AttributeControls.ToList().
                    Select(ac => new SelectListItem { Text = ac.Name, Value = ac.AttributeControlId.ToString() }).ToList();
            }
            //var jsonResult = Json(attrControls, JsonRequestBehavior.AllowGet);
            //jsonResult.MaxJsonLength = int.MaxValue;
            //return jsonResult;
            return Json(attrControls,JsonRequestBehavior.AllowGet);
        }

我在下面的行中遇到异常 这是我的load.chtml文件

<script type="text/javascript">
    var InitialRowData = '@Html.Raw(Json.Encode(Model))';
    var isLayoutEditable = false;
    var occupied = '@Model.occupied';
    var notoccupied = '@Model.notoccupied';
    var blocked = '@Model.blocked';
</script>

@ Html.Raw(Json.Encode(型号))';

有json的最大长度是200000左右,如何增加大小,什么都没有用。有什么帮助吗?

提前致谢。

3 个答案:

答案 0 :(得分:17)

好的,所以我最近才有同样的问题。我试图做@Html.Raw(Json.Encode(Model))将模型发送到javascript,并且收到错误,字符串太长。

我四处寻找答案,找不到任何可以直接回答问题的答案,然而,我找到了This Stack Answer然后我用来弄清楚如何解决我们的问题。

  

这里的想法是设置JavaScriptSerializer,手动设置MaxJsonLength,序列化模型,然后将其传递给javascript。

在视图的HTML中:

@{
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    serializer.MaxJsonLength = Int32.MaxValue;
    var jsonModel = serializer.Serialize(Model);
}

在您的javascript中:

<script>
    $(function () {
        var viewModel = @Html.Raw(jsonModel);
        // now you can access Model in JSON form from javascript
    });
</script>

答案 1 :(得分:1)

尝试按照此链接上的步骤进行操作,基本上是因为json对象返回的大小太大而超出了默认邮件大小的最大大小

http://www.smartdigitizers.com/net-development-tips/error-during-serialization-or-deserialization-using-the-json-javascriptserializer/

答案 2 :(得分:0)

我最近遇到了同样的问题,并按预期更改了序列化代码及其工作方式。 在代码中使用以下代码:  var InitialRowData ='@ Html.Raw(JsonConvert.SerializeObject(Model))';