Estoy usando la función de autocompletar de jQuery. Cuando trato de recuperar la lista de más de 17000 registros (cada uno no tendrá más de 10 caracteres de longitud), está excediendo la longitud y arroja el error:
Información de excepción:
Tipo de excepción: InvalidOperationException
Mensaje de excepción: Error durante la serialización o deserialización utilizando JSON JavaScriptSerializer. La longitud de la cadena excede el valor establecido en la propiedad maxJsonLength.
¿Puedo establecer una longitud ilimitada para maxJsonLength
adentro web.config
? Si no, ¿cuál es la longitud máxima que puedo establecer?
asp.net
asp.net-mvc
json
Prasad
fuente
fuente
Respuestas:
NOTA: esta respuesta se aplica solo a los servicios web; si devuelve JSON desde un método de controlador, asegúrese de leer también esta respuesta SO a continuación: https://stackoverflow.com/a/7207539/1246870
La propiedad MaxJsonLength no puede ser ilimitada, es una propiedad entera que por defecto es 102400 (100k).
Puede establecer la
MaxJsonLength
propiedad en su web.config:fuente
2147483647
como señalan @depsart y @ Descár.return Json()
o algo asíSi está utilizando MVC 4 , asegúrese de revisar esta respuesta también.
Si aún recibe el error:
maxJsonLength
propiedad en su valor máximo en web.configsu problema es probable que:
Básicamente, lo "interno"
JavaScriptSerializer
respeta el valor demaxJsonLength
cuando se llama desde un método web; el uso directo de unJavaScriptSerializer
(o el uso a través de un método de acción MVC / controlador) no respeta lamaxJsonLength
propiedad, al menos no desde lasystemWebExtensions.scripting.webServices.jsonSerialization
sección de web.config.Como solución alternativa, puede hacer lo siguiente dentro de su controlador (o en cualquier lugar realmente):
Esta respuesta es mi interpretación de esta respuesta del foro asp.net .
fuente
Json()
método de resultado de acción en asp.net mvc.En MVC 4 puedes hacer:
en tu controlador.
Adición:
Para cualquier persona desconcertada por los parámetros que necesita especificar, una llamada podría verse así:
fuente
Puede configurar la longitud máxima para solicitudes json en su archivo web.config:
El valor predeterminado para maxJsonLength es 102400 . Para obtener más detalles, consulte esta página de MSDN: http://msdn.microsoft.com/en-us/library/bb763183.aspx
fuente
si todavía recibe un error después de la configuración de web.config como la siguiente:
Lo resolví siguiendo:
Espero que esto ayude.
fuente
Estaba teniendo este problema en ASP.NET Web Forms. Estaba ignorando por completo la configuración del archivo web.config, así que hice esto:
Por supuesto, en general, esta es una práctica terrible. Si está enviando esta cantidad de datos en una llamada de servicio web, debe considerar un enfoque diferente.
fuente
Lo arreglé.
Funciona muy bien.
fuente
Seguí la respuesta de Vestigal y llegué a esta solución:
Cuando necesitaba publicar un json grande en una acción en un controlador, recibía el famoso "Error durante la deserialización usando el JSON JavaScriptSerializer. La longitud de la cadena excede el valor establecido en la propiedad maxJsonLength. \ R \ nNombre del parámetro: entrada proveedor de valor ".
Lo que hice fue crear un nuevo ValueProviderFactory, LargeJsonValueProviderFactory, y establecer MaxJsonLength = Int32.MaxValue en el método GetDeserializedObject
Luego, en el método Application_Start de Global.asax.cs, reemplace ValueProviderFactory con el nuevo:
fuente
si, después de implementar la adición anterior en su web.config, obtiene una "Sección de configuración no reconocida system.web.extensions". error, entonces intente agregar esto a su web.config en la
<ConfigSections>
sección:fuente
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
, como se ve en esta página: forums.asp.net/t/1446510.aspx/1puedes escribir esta línea en el controlador
también puedes escribir esta línea en
web.config
``
Para estar seguro, use ambos.
fuente
Si recibe este error del MiniProfiler en MVC, puede aumentar el valor estableciendo la propiedad
MiniProfiler.Settings.MaxJsonResponseSize
en el valor deseado. Por defecto, esta herramienta parece ignorar el valor establecido en la configuración.Cortesía de mvc-mini-profiler .
fuente
Simplemente configure la propiedad MaxJsonLength en el método de acción de MVC
fuente
Sugiero configurarlo en Int32.MaxValue.
fuente
¿Qué tal algún atributo mágico?
Luego, puede aplicarlo globalmente utilizando la configuración de filtro global o controlador / acción inteligente.
fuente
La pregunta realmente es si realmente necesita devolver 17k registros. ¿Cómo planea manejar todos los datos en el navegador? Los usuarios no van a desplazarse a través de 17000 filas de todos modos.
Un mejor enfoque es recuperar solo los "primeros pocos" registros y cargar más según sea necesario.
fuente
Puede configurarlo en la configuración como han dicho otros, o puede configurarlo en una instancia individual del serializador como:
fuente
Para aquellos que tienen problemas con MVC3 con JSON que se deserializa automáticamente para un modelo de carpeta y es demasiado grande, aquí hay una solución.
Gracias a http://blog.naver.com/techshare/100145191355 y https://gist.github.com/DalSoft/1588818 por señalarme en la dirección correcta sobre cómo hacer esto. El último enlace en el primer sitio contiene el código fuente completo de la solución.
fuente
Si se encuentra con este tipo de problema en la Vista, puede usar el siguiente método para resolverlo. Aquí usé el paquete Newtonsoft .
fuente
fuente
Parece que no hay un valor "ilimitado". El valor predeterminado es 2097152 caracteres, lo que equivale a 4 MB de datos de cadena Unicode.
Como ya se observó, 17,000 registros son difíciles de usar bien en el navegador. Si presenta una vista agregada, puede ser mucho más eficiente hacer la agregación en el servidor y transferir solo un resumen en el navegador. Por ejemplo, considere un buscador de sistema de archivos, solo vemos la parte superior del árbol, luego emitimos más solicitudes a medida que profundizamos. El número de registros devueltos en cada solicitud es relativamente pequeño. Una presentación en vista de árbol puede funcionar bien para grandes conjuntos de resultados.
fuente
Acabo de encontrarme con esto. Estoy obteniendo más de 6,000 registros. Solo decidí que solo haría un poco de paginación. Como en, acepto un número de página en mi punto final MVC JsonResult, que está predeterminado en 0, por lo que no es necesario, así:
Entonces, en lugar de decir:
Yo digo:
Es muy simple. Luego, en JavaScript, en lugar de esto:
En cambio digo:
Y añada sus registros a lo que sea que estaba haciendo con ellos en primer lugar. O simplemente espere hasta que todas las llamadas terminen y emita los resultados juntos.
fuente
Resolví el problema agregando este código:
fuente
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();
Solución alternativa de ASP.NET MVC 5:
(El mío es similar a la respuesta anterior de MFC con algunos pequeños cambios)
Todavía no estaba listo para cambiar a Json.NET y en mi caso el error estaba ocurriendo durante la solicitud. El mejor enfoque en mi escenario fue modificar el real
JsonValueProviderFactory
que aplica la solución al proyecto global y puede hacerse editando elglobal.cs
archivo como tal.agregue una entrada web.config:
y luego crea las dos clases siguientes
Básicamente, se trata de una copia exacta de la implementación predeterminada que se encuentra en,
System.Web.Mvc
pero con la adición de un valor de configuración web.config configurableaspnet:MaxJsonLength
.fuente
Solución para UpdatePanel de WebForms:
Agregue una configuración a Web.config:
https://support.microsoft.com/en-us/kb/981884
ScriptRegistrationManager
La clase contiene el siguiente código:fuente
No necesitamos ningún cambio en el lado del servidor. puedes arreglar esto solo modificar por archivo web.config Esto me ayudó. probar esto
fuente
utilizar
lib\Newtonsoft.Json.dll
fuente
Solución para ASP.NET MVC: si desea solucionarlo solo para una acción particular que está causando el problema, codifique de esta manera:
puedes cambiar a esto:
Y la funcionalidad debe ser la misma, solo puede devolver JSON más grande como respuesta.
Explicación basada en el código fuente ASP.NET MVC: puede verificar qué
Controller.Json
método hace en el código fuente ASP.NET MVCEstá llamando a otro
Controller.Json
método:donde pasaron
contentType
ycontentEncoding
objeto sonnull
. Entonces, básicamente, llamarreturn Json(object)
al controlador es equivalente a llamarreturn new JsonResult { Data = object, JsonRequestBehavior = sonRequestBehavior.DenyGet }
. Puedes usar la segunda forma y parametrizarJsonResult
.Entonces, ¿qué sucede cuando establece la
MaxJsonLength
propiedad (por defecto es nula)? Se pasa a laJavaScriptSerializer.MaxJsonLength
propiedad y luegoJavaScriptSerializer.Serialize
se llama método :Y cuando no establece la
MaxJsonLenght
propiedad del serializador, entonces toma el valor predeterminado que es solo 2 MB.fuente
si este valor de maxJsonLength es int, entonces, ¿qué tan grande es su int 32bit / 64bit / 16bit? ... solo quiero estar seguro de cuál es el valor máximo que puedo establecer como maxJsonLength
fuente
No es necesario que haga con web.config. Puede usar una propiedad corta durante el valor de captura de la lista de aprobación. Por ejemplo, declare un modelo como
aquí uso proporciones cortas como BC = código de barras BE = edición de libro, etc.
fuente