Obtener " La solicitud JSON era demasiado grande para ser deserializada"


Estoy recibiendo este Error:

La solicitud JSON era demasiado grande para ser deserializada.

Aquí hay un escenario donde esto ocurre. Tengo una clase de país que posee una lista de puertos marítimos de ese país

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

Uso KnockoutJS en el lado del cliente para hacer desplegables en cascada. Así que tenemos una matriz de dos desplegables, donde el primero es país, y el segundo es puertos de ese país.

Todo está funcionando bien hasta ahora, este es mi cliente script lateral:

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 lotes de puertos. Así que si usted tiene 3 o 4 veces "China" en su matriz y quiero enviarlo al servidor para guardar. Se produce el error.

¿Qué debo hacer para remediar esto?

Author: Jeroen, 2012-06-10

1 answers

Debe 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 las AppSettings:

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

Si esas opciones no funcionan, puede intentar crear una fábrica de proveedores de valor json personalizada utilizando JSON.NET como se especifica en este hilo .

 354
Author: VJAI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:55