Acabo de actualizar mi proyecto de API web ASP de . Net core 2.0 a 3.0 . yo estaba usando
services.AddMvc() .AddJsonOptions(options =>options.SerializerSettings.ContractResolver = new DefaultContractResolver());anteriormente para garantizar que el JSON serializado esté en minúsculas.
Después de la actualización a 3.0 me sale 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 del tipo 'IMvcBuilder' (¿falta una directiva de uso o una referencia de ensamblado?)
De acuerdo con 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 . He intentado instalar/reinstalar esto pero aún no puedo resolver el método. Curiosamente, intellisense solo muestra Microsoft.AspNetCore.Mvc.Formatters. Xml cuando intento agregar la declaración de uso a pesar de que 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 quizás el método haya quedado obsoleto en 3.0 a favor de algún otro mecanismo de configuración.
Funciona para mí, instale el paquete NewtonsoftJson de NuGet "dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0" versión 3.1.0 que funciona para ASP.NET Core 3.0 y use el siguiente código:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0) .AddNewtonsoftJson(opt => { opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; });Espero que esté funcionando bien, gracias.
esto ayudaría
public void ConfigureServices(IServiceCollection services) { services.AddControllers().AddJsonOptions(options=> { options.JsonSerializerOptions.PropertyNamingPolicy = null; options.JsonSerializerOptions.DictionaryKeyPolicy = null; }); services.AddDbContext<PaymentDetailContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DevConnection"))); }Esto funcionó para mí, mientras usaba .Net Core 3 :
services.AddMvc().AddJsonOptions(o => { o.JsonSerializerOptions.PropertyNamingPolicy = null; o.JsonSerializerOptions.DictionaryKeyPolicy = null; });Esto ayudaría a intentar instalar el paquete Nuget
Microsoft.AspNetCore.Mvc.NewtonsoftJson
Como parte de ASP.NET Core 3.0, el equipo dejó de incluir Json.NET de forma predeterminada. Puede leer más sobre eso 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 al respecto 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 más antiguos como porque se supone que la nueva biblioteca no es un reemplazo completo, por lo que no verá el conjunto completo de funciones allí.
Para volver a configurar 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 ConfigureServices de inicio, deberá configurar MVC de esta manera:
services.AddControllers() .AddNewtonsoftJson(); Esto configura los controladores MVC y lo configura para usar Json.NET en lugar de esa nueva API. En lugar de controladores, también puede usar una sobrecarga de MVC diferente (por ejemplo, para controladores con vistas o páginas de Razor). Ese método AddNewtonsoftJson tiene una sobrecarga que le permite configurar las opciones de Json.NET como estaba acostumbrado con AddJsonOptions en ASP.NET Core 2.x.
services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); });