¿A dónde fue IMvcBuilder AddJsonOptions en .Net Core 3.0?

Resuelto NeilMacMullen asked hace 5 años • 7 respuestas

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.

NeilMacMullen avatar Apr 13 '19 21:04 NeilMacMullen
Aceptado

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 AddNewtonsoftJsonmétodo tiene una sobrecarga que le permite configurar las opciones de Json.NET como estaba acostumbrado AddJsonOptionsen ASP.NET Core 2.x.

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });
poke avatar Apr 13 '2019 15:04 poke

Esto funcionó para mí, mientras usaba .NET Core 3:

services.AddMvc().AddJsonOptions(o =>
{
    o.JsonSerializerOptions.PropertyNamingPolicy = null;
    o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});
Mohammad Olfatmiri avatar Oct 14 '2019 11:10 Mohammad Olfatmiri

Asegúrese de haber instalado el paquete Microsoft.AspNetCore.Mvc.NewtonsoftJson.

ingrese la descripción de la imagen aquí

Drilon Ahmetaj avatar Jul 14 '2021 08:07 Drilon Ahmetaj