¿Puedo establecer una longitud ilimitada para maxJsonLength en web.config?
Estoy usando la función de autocompletar de jQuery. Cuando intento recuperar la lista de más de 17000 registros (cada uno no tendrá más de 10 caracteres de longitud), se excede 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
in web.config
? Si no, ¿cuál es la longitud máxima que puedo establecer?
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 cuyo valor predeterminado es 102400 (100k).
Puede configurar la MaxJsonLength
propiedad en su web.config:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
Si está utilizando MVC 4 , asegúrese de consultar esta respuesta también.
Si aún recibe el error:
- después de establecer la
maxJsonLength
propiedad en su valor máximo en web.config - y sabes que la longitud de tus datos es menor que este valor
- y no está utilizando un método de servicio web para la serialización de JavaScript
Es probable que su problema sea que:
El valor de la propiedad MaxJsonLength se aplica solo a la instancia interna de JavaScriptSerializer que utiliza la capa de comunicación asincrónica para invocar métodos de servicios web. ( MSDN: Propiedad ScriptingJsonSerializationSection.MaxJsonLength )
Básicamente, lo "interno" JavaScriptSerializer
respeta el valor de maxJsonLength
cuando se llama desde un método web; El uso directo de a JavaScriptSerializer
(o el uso a través de un método de acción/controlador MVC) no respeta la maxJsonLength
propiedad, al menos no desde la systemWebExtensions.scripting.webServices.jsonSerialization
sección de web.config. En particular, ¡el Controller.Json()
método no respeta los ajustes de configuración!
Como solución alternativa, puede hacer lo siguiente dentro de su Controlador (o en cualquier lugar realmente):
var serializer = new JavaScriptSerializer();
// For simplicity just use Int32's max value.
// You could always read the value from the config section mentioned above.
serializer.MaxJsonLength = Int32.MaxValue;
var resultData = new { Value = "foo", Text = "var" };
var result = new ContentResult{
Content = serializer.Serialize(resultData),
ContentType = "application/json"
};
return result;
Esta respuesta es mi interpretación de esta respuesta del foro asp.net .