Obtenir " la demande JSON était trop grande pour être deserialized"

je reçois cette erreur:

Le JSON demande était trop grand pour être désérialisé.

Voici un scénario où cela se produit. J'ai une classe de pays qui détiennent une liste de ports de ce pays

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

j'utilise KnockoutJS côté client pour faire une chute en cascade. Nous avons donc une série de deux drop-down, où le premier est country, et le second est ports de ce pays.

Tout fonctionne très bien jusqu'à présent, ceci mon script côté client:

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

le problème se produit quand un pays comme la Chine est choisi, qui a lots de ports. Donc, si vous avez 3 ou 4 fois "Chine" dans votre tableau et je veux l'envoyer au serveur pour enregistrer. L'erreur se produit.

Que dois-je faire pour y remédier?

175
demandé sur Jeroen 2012-06-10 08:15:36

1 réponses

vous devez ajuster la propriété maxJsonLength à une valeur plus élevée dans web.config pour résoudre le problème.

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

fixe une valeur plus élevée pour aspnet:MaxJsonDeserializerMembers dans les appendices:

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

si ces options ne fonctionnent pas, vous pouvez essayer de créer une usine de fournisseur de valeur JSON personnalisée en utilisant JSON.NET comme spécifié dans ce filetage .

354
répondu VJAI 2017-05-23 12:17:55