获取“JSON请求太大,无法反序列化”

我得到这个错误:

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, }; } (); 

这个问题发生在一个像中国这样的国家,这个国家有很多港口。 所以如果你的arrays中有3或4次“中国”,我想把它发送到服务器保存。 发生错误。

我应该怎样做才能解决这个问题?

您必须在web.config 中将maxJsonLength属性调整为更高的值才能解决问题。

 <system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="2147483644"/> </webServices> </scripting> </system.web.extensions> 

aspnet:MaxJsonDeserializerMembers设置一个更高的值aspnet:MaxJsonDeserializerMembers appSettings中的aspnet:MaxJsonDeserializerMembers

 <appSettings> <add key="aspnet:MaxJsonDeserializerMembers" value="150000" /> </appSettings> 

如果这些选项不起作用,您可以尝试使用此线程中指定的JSON.NET创build自定义json值提供程序工厂。