J'obtiens cette erreur :
La requête JSON était trop grande pour être désérialisée.
Voici un scénario dans lequel cela se produit. J'ai une classe de pays qui contient une liste des ports d'expédition 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 du côté client pour créer des listes déroulantes en cascade. Nous avons donc un tableau de deux listes déroulantes, où la première est le pays, et la seconde les ports de ce pays.
Tout fonctionne bien jusqu'à présent, c'est 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 survient lorsqu'on choisit un pays comme la Chine, qui a lots de ports. Donc si vous avez 3 ou 4 fois "China" dans votre tableau et que je veux l'envoyer au serveur pour le sauvegarder. L'erreur se produit.
Que dois-je faire pour y remédier ?
4 votes
Si vous êtes curieux de savoir pourquoi cela se produit ou si vous écrivez votre sérialiseur client, consultez le site suivant code source de JsonValueProviderFactory.cs - Il semble que l'équipe d'ASP.NET MVC ait intentionnellement fixé la limite à 1000.