Je viens de mettre à niveau mon projet ASP API Web à partir de .Net core 2.0
à 3.0
. J'utilisais
services.AddMvc()
.AddJsonOptions(options =>options.SerializerSettings.ContractResolver
= new DefaultContractResolver());
auparavant pour garantir une mise en boîtier inférieure du JSON sérialisé.
Après la mise à niveau vers 3.0, j'obtiens cette erreur:
L'erreur CS1061 'IMvcBuilder' ne contient pas de définition pour 'AddJsonOptions' et aucune méthode d'extension accessible 'AddJsonOptions' acceptant un premier argument de type 'IMvcBuilder' n'a pu être trouvée (vous manque une directive using ou une référence d'assembly?)
Selon AddJsonOptions pour MvcJsonOptions dans Asp.Net Core 2.2 la méthode d'extension AddJsonOptions est/a été fournie par le Microsoft.AspNetCore.Mvc.Formatters.Json paquet nuget. J'ai essayé d'installer/réinstaller ceci mais je ne parviens toujours pas à résoudre la méthode. Fait intéressant, intellisense n'affiche que Microsoft.AspNetCore.Mvc.Formatters. Xml lorsque j'essaie d'ajouter l'instruction using même si j'ai ajouté le package de nuget Json.
Une idée de ce qui se passe? Le documentation for AddJsonOptions ne monte que vers .Net 2.2 donc peut-être que la méthode a été déconseillée dans 3.0 en faveur d'un autre mécanisme de configuration?
Dans le cadre d'ASP.NET Core 3.0, l'équipe s'est éloignée de l'inclusion de Json.NET par défaut. Vous pouvez en savoir plus à ce sujet en général dans le annonce sur la rupture des modifications de Microsoft.AspNetCore.App .
Au lieu de Json.NET, ASP.NET Core 3.0 et .NET Core 3.0 incluent une API JSON différente qui se concentre un peu plus sur les performances. Vous pouvez en apprendre davantage à ce sujet dans le annonce sur "L'avenir de JSON dans .NET Core 3.0" .
Les nouveaux modèles pour ASP.NET Core ne seront plus fournis avec Json.NET mais vous pouvez facilement reconfigurer le projet pour l'utiliser à la place de la nouvelle bibliothèque JSON. Ceci est important pour la compatibilité avec les projets plus anciens et aussi parce que la nouvelle bibliothèque n'est pas censée être un remplacement complet, donc vous ne verrez pas l'ensemble des fonctionnalités là-bas.
Afin de reconfigurer votre projet ASP.NET Core 3.0 avec Json.NET, vous devrez ajouter une référence NuGet à Microsoft.AspNetCore.Mvc.NewtonsoftJson
, qui est le package qui comprend tous les bits nécessaires. Ensuite, dans le ConfigureServices
de démarrage, vous devrez configurer MVC comme ceci:
services.AddControllers()
.AddNewtonsoftJson();
Cela configure les contrôleurs MVC et le configure pour utiliser Json.NET au lieu de cette nouvelle API. Au lieu de contrôleurs, vous pouvez également utiliser une surcharge MVC différente (par exemple pour les contrôleurs avec vues ou les pages Razor). Cette méthode AddNewtonsoftJson
a une surcharge qui vous permet de configurer les options Json.NET comme vous en étiez habitué avec AddJsonOptions
dans ASP.NET Core 2.x.
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
Cela a fonctionné pour moi (.net core 3)
services.AddMvc().AddJsonOptions(o =>
{
o.JsonSerializerOptions.PropertyNamingPolicy = null;
o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});
Cela aiderait
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")));
}