Saya menggunakan fitur pelengkapan otomatis jQuery. Ketika saya mencoba untuk mengambil daftar lebih dari 17000 catatan (masing-masing tidak akan memiliki lebih dari 10 karakter), itu melebihi panjang dan melemparkan kesalahan:
Informasi pengecualian:
Jenis pengecualian: InvalidOperationException
Pesan pengecualian: Kesalahan selama serialisasi atau deserialisasi menggunakan JSON JavaScriptSerializer. Panjang string melebihi nilai yang ditetapkan pada properti maxJsonLength.
Bisakah saya menetapkan panjang tak terbatas untuk maxJsonLength
masuk web.config
? Jika tidak, berapa panjang maksimum yang dapat saya atur?
asp.net
asp.net-mvc
json
Prasad
sumber
sumber
Jawaban:
CATATAN: jawaban ini hanya berlaku untuk layanan Web, jika Anda mengembalikan JSON dari metode Controller, pastikan Anda membaca jawaban SO ini di bawah ini juga: https://stackoverflow.com/a/7207539/1246870
The MaxJsonLength properti tidak bisa terbatas, adalah properti integer yang defaultnya 102400 (100k).
Anda dapat mengatur
MaxJsonLength
properti di web.config Anda:sumber
2147483647
ditunjukkan oleh @depsart dan @ Descár tunjukkan.return Json()
atau yang lainnyaJika Anda menggunakan MVC 4 , pastikan untuk memeriksa jawaban ini juga.
Jika Anda masih menerima kesalahan:
maxJsonLength
properti ke nilai maksimumnya di web.configmasalah Anda kemungkinan besar adalah:
Pada dasarnya, "internal"
JavaScriptSerializer
menghargai nilaimaxJsonLength
ketika dipanggil dari metode web; penggunaan langsung dariJavaScriptSerializer
(atau penggunaan melalui metode-aksi / Pengendali MVC) tidak menghormatimaxJsonLength
properti, setidaknya tidak darisystemWebExtensions.scripting.webServices.jsonSerialization
bagian web.config.Sebagai solusinya, Anda dapat melakukan hal berikut di dalam Pengontrol Anda (atau di mana pun juga):
Jawaban ini adalah interpretasi saya atas jawaban forum asp.net ini .
sumber
Json()
metode hasil tindakan di asp.net mvc.Di MVC 4 Anda dapat melakukan:
di controller Anda.
Tambahan:
Bagi siapa pun yang bingung dengan parameter yang perlu Anda tentukan, panggilan bisa terlihat seperti ini:
sumber
Anda dapat mengkonfigurasi panjang maks untuk permintaan json di file web.config Anda:
Nilai default untuk maxJsonLength adalah 102400 . Untuk detail lebih lanjut, lihat halaman MSDN ini: http://msdn.microsoft.com/en-us/library/bb763183.aspx
sumber
jika Anda masih mendapatkan kesalahan setelah pengaturan web.config seperti berikut:
Saya menyelesaikannya dengan mengikuti:
Saya harap ini akan membantu.
sumber
Saya mengalami masalah ini dalam Formulir Web ASP.NET. Itu benar-benar mengabaikan pengaturan file web.config jadi saya melakukan ini:
Tentu saja secara keseluruhan ini adalah praktik yang mengerikan. Jika Anda mengirim data sebanyak ini dalam panggilan layanan web, Anda harus melihat pendekatan yang berbeda.
sumber
Aku telah memperbaikinya.
Ini bekerja dengan sangat baik.
sumber
Saya mengikuti jawaban vestigal dan mendapatkan solusi ini:
Ketika saya perlu memposting json besar ke aksi di controller, saya akan mendapatkan kesalahan "terkenal selama deserialisasi menggunakan JSON JavaScriptSerializer. Panjang string melebihi nilai yang ditetapkan pada properti maxJsonLength. \ R \ nParameter name: input penyedia nilai ".
Apa yang saya lakukan adalah membuat ValueProviderFactory, LargeJsonValueProviderFactory, dan atur MaxJsonLength = Int32.MaxValue dalam metode GetDeserializedObject
Kemudian, dalam metode Application_Start dari Global.asax.cs, ganti ValueProviderFactory dengan yang baru:
sumber
jika, setelah menerapkan penambahan di atas ke dalam web.config Anda, Anda mendapatkan "bagian konfigurasi yang tidak dikenal system.web.extensions." galat lalu coba tambahkan ini ke web.config Anda di
<ConfigSections>
bagian:sumber
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
, seperti yang terlihat di halaman ini: forums.asp.net/t/1446510.aspx/1Anda dapat menulis baris ini ke Controller
Anda juga dapat menulis baris ini
web.config
`
Agar aman, gunakan keduanya.
sumber
Jika Anda mendapatkan kesalahan ini dari MiniProfiler di MVC maka Anda dapat meningkatkan nilainya dengan mengatur properti
MiniProfiler.Settings.MaxJsonResponseSize
ke nilai yang diinginkan. Secara default, alat ini tampaknya mengabaikan nilai yang diatur dalam konfigurasi.Atas perkenan mvc-mini-profiler .
sumber
Cukup atur MaxJsonLength proprty dalam metode Action MVC
sumber
Saya sarankan mengaturnya ke Int32.MaxValue.
sumber
Bagaimana dengan sihir atribut?
Kemudian Anda bisa menerapkannya secara global menggunakan konfigurasi filter global atau pengontrol / tindakan-bijaksana.
sumber
Pertanyaannya adalah apakah Anda benar-benar perlu mengembalikan catatan 17k? Bagaimana Anda berencana menangani semua data di browser? Pengguna tidak akan menggulir 17.000 baris.
Pendekatan yang lebih baik adalah dengan hanya mengambil catatan "beberapa teratas" dan memuat lebih banyak seperti yang diperlukan.
sumber
Anda dapat mengaturnya di konfigurasi seperti yang dikatakan orang lain, atau Anda dapat mengaturnya pada instance serializer seperti:
sumber
Bagi mereka yang mengalami masalah dengan MVC3 dengan JSON yang secara otomatis deserialized untuk pengikat model dan terlalu besar, berikut ini solusinya.
Terima kasih kepada http://blog.naver.com/techshare/100145191355 dan https://gist.github.com/DalSoft/1588818 karena mengarahkan saya ke arah yang benar untuk melakukan hal ini. Tautan terakhir di situs pertama berisi kode sumber lengkap untuk solusi.
sumber
Jika Anda mengalami masalah semacam ini di Tampilan, Anda dapat menggunakan metode di bawah ini untuk menyelesaikannya. Di sini saya menggunakan paket Newtonsoft .
sumber
sumber
Tampaknya tidak ada nilai "tidak terbatas". Standarnya adalah 2097152 karakter, yang setara dengan 4 MB data string Unicode.
Seperti yang telah diamati, 17.000 catatan sulit digunakan dengan baik di peramban. Jika Anda menyajikan tampilan agregat, mungkin jauh lebih efisien untuk melakukan agregasi di server dan hanya mentransfer ringkasan di browser. Misalnya, pertimbangkan peramban sistem file, kami hanya melihat bagian atas pohon, lalu memancarkan permintaan lebih lanjut saat kami menelusuri. Jumlah catatan yang dikembalikan dalam setiap permintaan relatif kecil. Presentasi tampilan pohon dapat bekerja dengan baik untuk set hasil yang besar.
sumber
Baru saja berlari ke ini. Saya mendapatkan lebih dari 6.000 catatan. Saya baru saja memutuskan untuk melakukan paging. Seperti pada, saya menerima nomor halaman di titik akhir MVC JsonResult saya, yang default ke 0 sehingga tidak perlu, seperti:
Maka alih-alih mengatakan:
Saya katakan:
Ini sangat sederhana. Kemudian, dalam JavaScript, alih-alih ini:
Saya malah mengatakan:
Dan tambahkan catatan Anda pada apa pun yang Anda lakukan dengan mereka di tempat pertama. Atau tunggu sampai semua panggilan selesai dan hasil bersama-sama rusak.
sumber
Saya memecahkan masalah dengan menambahkan kode ini:
sumber
string confString = HttpContext.Request.ApplicationPath.ToString(); var conf = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(confString); var section = (System.Web.Configuration.ScriptingJsonSerializationSection)conf.GetSection("system.web.extensions/scripting/webServices/jsonSerialization"); section.MaxJsonLength = int.MaxValue; conf.Save();
Alternatif ASP.NET MVC 5 Fix:
(Tambang mirip dengan jawaban MFC di atas dengan beberapa perubahan kecil)
Saya belum siap untuk berubah ke Json.NET dulu dan dalam kasus saya kesalahan terjadi selama permintaan. Pendekatan terbaik dalam skenario saya adalah memodifikasi aktual
JsonValueProviderFactory
yang berlaku untuk memperbaiki proyek global dan dapat dilakukan dengan mengeditglobal.cs
file seperti itu.tambahkan entri web.config:
dan kemudian buat dua kelas berikut
Ini pada dasarnya adalah salinan persis dari implementasi default yang ditemukan di
System.Web.Mvc
tetapi dengan penambahan nilai pengaturan web.config yang dapat dikonfigurasiaspnet:MaxJsonLength
.sumber
Solusi untuk WebForms UpdatePanel:
Tambahkan pengaturan ke Web.config:
https://support.microsoft.com/en-us/kb/981884
ScriptRegistrationManager
kelas berisi kode berikut:sumber
Kami tidak membutuhkan perubahan sisi server. Anda dapat memperbaiki ini hanya memodifikasi oleh file web.config Ini membantu saya. coba ini
sumber
menggunakan
lib\Newtonsoft.Json.dll
sumber
Perbaiki untuk ASP.NET MVC: jika Anda ingin memperbaikinya hanya untuk tindakan tertentu yang menyebabkan masalah maka kode seperti ini:
Anda dapat mengubah ini:
Dan fungsinya harus sama, Anda bisa mengembalikan JSON yang lebih besar sebagai respons.
Penjelasan berdasarkan kode sumber ASP.NET MVC: Anda dapat memeriksa
Controller.Json
metode apa yang dilakukan dalam kode sumber ASP.NET MVCItu memanggil
Controller.Json
metode lain :di mana berlalu
contentType
dancontentEncoding
objek beradanull
. Jadi pada dasarnya memanggilreturn Json(object)
controller sama dengan memanggilreturn new JsonResult { Data = object, JsonRequestBehavior = sonRequestBehavior.DenyGet }
. Anda dapat menggunakan formulir dan parameter keduaJsonResult
.Jadi apa yang terjadi ketika Anda menetapkan
MaxJsonLength
properti (secara default itu nol)? Itu diturunkan keJavaScriptSerializer.MaxJsonLength
properti dan kemudianJavaScriptSerializer.Serialize
metode disebut :Dan ketika Anda tidak mengatur
MaxJsonLenght
properti serializer maka dibutuhkan nilai default yang hanya 2MB.sumber
jika nilai maxJsonLength ini adalah int maka seberapa besar int 32bit / 64bit / 16bit .... saya hanya ingin memastikan whats nilai maksimum yang dapat saya tetapkan sebagai maxJsonLength saya
sumber
Anda tidak perlu melakukan dengan web.config Anda dapat menggunakan properti pendek selama nilai tangkapan dari daftar yang lewat Misalnya mendeklarasikan model seperti
di sini saya menggunakan proporsi pendek seperti BC = barcode BE = edisi buku dan sebagainya
sumber