Saya mendapatkan Galat ini:
Permintaan JSON terlalu besar untuk dideeralisasi.
Inilah skenario di mana ini terjadi. Saya memiliki kelas negara yang memiliki daftar pelabuhan pengiriman di negara itu
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public List<Port> Ports { get; set; }
}
Saya menggunakan KnockoutJS di sisi klien untuk membuat drop down cascading. Jadi kami memiliki array dua drop down, di mana yang pertama adalah negara, dan yang kedua adalah pelabuhan negara itu.
Sejauh ini semuanya berfungsi dengan baik, ini skrip sisi klien saya:
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,
};
} ();
Masalahnya terjadi ketika negara seperti China dipilih, yang memiliki banyak pelabuhan. Jadi jika Anda memiliki 3 atau 4 kali "China" dalam array Anda dan saya ingin mengirimkannya ke server untuk disimpan. Kesalahan terjadi.
Apa yang harus saya lakukan untuk memperbaiki ini?
asp.net-mvc
knockout.js
Kayvan Karim
sumber
sumber
Jawaban:
Anda harus menyesuaikan properti maxJsonLength ke nilai yang lebih tinggiweb.config
untuk menyelesaikan masalah.Tetapkan nilai yang lebih tinggi
aspnet:MaxJsonDeserializerMembers
di dalam pengaturan aplikasi:Jika opsi itu tidak berfungsi, Anda bisa mencoba membuat pabrik penyedia nilai json khusus menggunakan JSON.NET seperti yang ditentukan dalam utas ini .
sumber
aspnet:MaxJsonDeserializerMembers
bekerja untuk saya juga. Apakah ada yang tahu di mana ini sebenarnya didokumentasikan?Jika Anda tidak ingin mengubah pengaturan global di konfigurasi web
Menggunakan pengaturan global akan mengaktifkan respons json besar di seluruh aplikasi Anda yang dapat membuka Anda hingga penolakan serangan layanan.
Jika beberapa lokasi pilihan diizinkan, Anda dapat dengan cepat menggunakan serialiser json lain menggunakan metode Konten seperti:
sumber