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?
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 .