我正在尝试从我的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左右,如何增加大小,什么都没有用。有什么帮助吗?提前致谢。
答案 0 :(得分:17)
好的,所以我最近才有同样的问题。我试图做@Html.Raw(Json.Encode(Model))
将模型发送到javascript,并且收到错误,字符串太长。
我四处寻找答案,找不到任何可以直接回答问题的答案,然而,我找到了This Stack Answer然后我用来弄清楚如何解决我们的问题。
这里的想法是设置
JavaScriptSerializer
,手动设置MaxJsonLength
,序列化模型,然后将其传递给javascript。
@{
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.MaxJsonLength = Int32.MaxValue;
var jsonModel = serializer.Serialize(Model);
}
<script>
$(function () {
var viewModel = @Html.Raw(jsonModel);
// now you can access Model in JSON form from javascript
});
</script>
答案 1 :(得分:1)
尝试按照此链接上的步骤进行操作,基本上是因为json对象返回的大小太大而超出了默认邮件大小的最大大小
答案 2 :(得分:0)
我最近遇到了同样的问题,并按预期更改了序列化代码及其工作方式。 在代码中使用以下代码: var InitialRowData ='@ Html.Raw(JsonConvert.SerializeObject(Model))';