【发布时间】:2016-02-24 14:35:05
【问题描述】:
我正在使用 ASP.NET MVC5,并且我发布了一个具有以下格式的视图模型:
{
row: {
...
DocumentID: ...
FileName: ...
FileContent: .... //Very Very long base64 string
...
}
}
这是我的 Kendo MVC Grid Create Action
[HttpPost]
public ActionResult Grid_Create([DataSourceRequest]DataSourceRequest request, MyViewModel row)
{
// THE PROGRAM DID NOT EVEN STEP INTO THIS LINE
try
{
...
}
catch (Exception ex)
{
ModelState.AddModelError("ERROR", ex.Message);
}
return Json(...);
}
其中MyViewModel是一个对应row的类,通过ASP.NET参数绑定机制自动绑定字段值。
一切都很好,直到文件太大以至于一旦 Grid 触发 Create 事件,它就会给我Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set on the maxJsonLength property.
我在 web.config 中设置了最大 JSON 长度,如下所示:
...
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="2147483644"/>
</webServices>
</scripting>
</system.web.extensions>
...
但还是失败了。
谁能告诉我为什么以及如何解决这个问题?
已编辑
我面临的问题不是如何返回大型 JSON 对象,而是如何将大型 JSON 对象发布到控制器。我正在向我的控制器发布一些大型 JSON 对象(带有文件内容),并且在模型绑定到 MyViewModel 的步骤中,已经抛出异常。
对控制器的请求如下所示:
【问题讨论】:
-
所以这里也正如我的回答所建议的那样,您需要覆盖默认的序列化和反序列化最大大小,所以如果它与 post 方法有关,那么您将不得不编写一个自定义模型绑定器,该绑定器在您的创建方法时命中接收到一些数据,在这个模型绑定器中,您可以编写逻辑以反序列化而不会出错,然后发送到控制器。
标签: c# json asp.net-mvc kendo-asp.net-mvc