¿A dónde fue IMvcBuilder AddJsonOptions en .Net Core 3.0?
Acabo de actualizar mi proyecto de API web ASP de .NET Core 2.0 a 3.0. yo estaba usando
services.AddMvc()
.AddJsonOptions(opts => opts.SerializerSettings.ContractResolver
= new DefaultContractResolver());
previamente para garantizar el uso de minúsculas en el JSON serializado.
Después de la actualización a 3.0 aparece este error:
El error CS1061 'IMvcBuilder' no contiene una definición para 'AddJsonOptions' y no se pudo encontrar ningún método de extensión accesible 'AddJsonOptions' que acepte un primer argumento de tipo 'IMvcBuilder' (¿falta una directiva de uso o una referencia de ensamblado?)
Según AddJsonOptions para MvcJsonOptions en Asp.Net Core 2.2, el método de extensión AddJsonOptions es/fue proporcionado por el paquete nuget Microsoft.AspNetCore.Mvc.Formatters.Json . Intenté instalar/reinstalar esto pero todavía no puedo resolver el método. Curiosamente, intellisense solo muestra Microsoft.AspNetCore.Mvc.Formatters. Xml cuando intento agregar la declaración de uso aunque agregué el paquete Json nuget.
¿Alguna idea de lo que está pasando? La documentación para AddJsonOptions solo llega hasta .NET 2.2, por lo que tal vez el método haya quedado obsoleto en 3.0 en favor de algún otro mecanismo de configuración.
Como parte de ASP.NET Core 3.0, el equipo dejó de incluir Json.NET de forma predeterminada. Puede leer más sobre esto en general en el anuncio sobre cambios importantes en Microsoft.AspNetCore.App .
En lugar de Json.NET, ASP.NET Core 3.0 y .NET Core 3.0 incluyen una API JSON diferente que se centra un poco más en el rendimiento. Puede obtener más información sobre esto en el anuncio sobre “El futuro de JSON en .NET Core 3.0” .
Las nuevas plantillas para ASP.NET Core ya no se incluirán con Json.NET, pero puede reconfigurar fácilmente el proyecto para usarlo en lugar de la nueva biblioteca JSON. Esto es importante tanto para la compatibilidad con proyectos anteriores como también porque se supone que la nueva biblioteca no es un reemplazo completo, por lo que no verá el conjunto completo de funciones allí.
Para reconfigurar su proyecto ASP.NET Core 3.0 con Json.NET, deberá agregar una referencia de NuGet a Microsoft.AspNetCore.Mvc.NewtonsoftJson
, que es el paquete que incluye todos los bits necesarios. Luego, en el Inicio ConfigureServices
, necesitarás configurar MVC de esta manera:
services.AddControllers()
.AddNewtonsoftJson();
Esto configura los controladores MVC y los configura para usar Json.NET en lugar de esa nueva API. En lugar de controladores, también puede utilizar una sobrecarga MVC diferente (por ejemplo, para controladores con vistas o páginas Razor). Ese AddNewtonsoftJson
método tiene una sobrecarga que le permite configurar las opciones de Json.NET como estaba acostumbrado AddJsonOptions
en ASP.NET Core 2.x.
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
Esto funcionó para mí, mientras usaba .NET Core 3
:
services.AddMvc().AddJsonOptions(o =>
{
o.JsonSerializerOptions.PropertyNamingPolicy = null;
o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});
Asegúrese de haber instalado el paquete Microsoft.AspNetCore.Mvc.NewtonsoftJson.