asp.net-mvc knockout.js

asp.net mvc - Obteniendo "La solicitud JSON era demasiado grande para deserializarla"



asp.net-mvc knockout.js (1)

Recibo este error:

La solicitud JSON era demasiado grande para deserializarla.

Aquí hay un escenario donde esto ocurre. Tengo una clase de país que tiene una lista de puertos de envío de ese país

public class Country { public int Id { get; set; } public string Name { get; set; } public List<Port> Ports { get; set; } }

Yo uso KnockoutJS en el lado del cliente para hacer un menú desplegable en cascada. Así que tenemos una variedad de dos menús desplegables, donde el primero es el país y el segundo es los puertos de ese país.

Todo funciona bien hasta ahora, este es mi guión del lado del cliente:

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

El problema ocurre cuando se selecciona un país como China, que tiene muchos puertos. Entonces, si tienes 3 o 4 veces "China" en tu matriz y quiero enviarlo al servidor para guardarlo. El error ocurre

¿Qué debería hacer para remediar esto?


maxJsonLength ajustar la propiedad maxJsonLength a un valor más alto en web.config para resolver el problema.

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

Establezca un valor más alto para aspnet:MaxJsonDeserializerMembers en appSettings:

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

Si esas opciones no funcionan, podría intentar crear una fábrica de proveedores de valores JSON personalizada utilizando JSON.NET como se especifica en este thread .