我遇到此错误:
JSON请求太大,无法反序列化。
下面是一个发生这种情况的场景。我有一个国家的类,其中包含该国的航运港口列表
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public List<Port> Ports { get; set; }
}
我在客户端使用KnockoutJS创建了一个级联下拉唐斯,因此我们有一个包含两个下拉列表的数组,其中第一个是国家,第二个是该国的港口。
到目前为止,一切都运行良好,这是我的客户端脚本:
var k1 = k1 || {};
$(document).ready(function () {
k1.MarketInfoItem = function (removeable) {
var self = this;
self.CountryOfLoadingId = ko.observable();
self.PortOfLoadingId = ko.observable();
self.CountryOfDestinationId = ko.observable();
self.PortOfDestinationId = ko.observable();
};
k1.viewModel = function () {
var marketInfoItems = ko.observableArray([]),
countries = ko.observableArray([]),
saveMarketInfo = function () {
var jsonData = ko.toJSON(marketInfoItems);
$.ajax({
url: 'SaveMarketInfos',
type: "POST",
data: jsonData,
datatype: "json",
contentType: "application/json charset=utf-8",
success: function (data) {
if (data) {
window.location.href = "Fin";
} else {
alert("Can not save your market information now!");
}
},
error: function (data) { alert("Can not save your contacts now!"); }
});
},
loadData = function () {
$.getJSON('../api/ListService/GetCountriesWithPorts', function (data) {
countries(data);
});
};
return {
MarketInfoItems: marketInfoItems,
Countries: countries,
LoadData: loadData,
SaveMarketInfo: saveMarketInfo,
};
} ();
当选择了像中国这样的国家时,这个问题就会出现,因为中国有很多端口。所以如果你的数组中有3或4个“中国”,我想把它发送到服务器上保存。这个错误就会出现。
我应该怎么做来补救呢?
3条答案
按热度按时间ycggw6v21#
您必须在
web.config
中将maxJsonLength属性调整为更高的值,才能解决此问题。在appSettings中为
aspnet:MaxJsonDeserializerMembers
设置一个更大的值:如果这些选项不起作用,您可以尝试使用此thread中指定的JSON.NET创建自定义json值提供程序工厂。
vx6bjr1n2#
如果您不想更改Web配置中的全局设置
使用全局设置将激活整个应用程序中的大量json响应,这可能会使您面临拒绝服务攻击。
如果允许选择一些位置,您可以使用Content方法快速使用另一个json序列化程序,如下所示:
mkh04yzy3#
设置并不总是有效的。处理这个问题的最好方法是通过控制器。你必须编写自己的Serialize JSON方法。这就是我如何解决返回一个非常大的json序列化对象作为对 AJAX 调用的响应的问题。
C#:将JsonResult数据型别取代为ContentResult
然后在Web.config文件中增加到最大大小
这对我有用。