web-dev-qa-db-fra.com

Où est passé IMvcBuilder AddJsonOptions dans .Net Core 3.0?

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?

93
NeilMacMullen

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();
    });
135
poke

Cela a fonctionné pour moi (.net core 3)

 services.AddMvc().AddJsonOptions(o =>
                {
                    o.JsonSerializerOptions.PropertyNamingPolicy = null;
                    o.JsonSerializerOptions.DictionaryKeyPolicy = null;
                });
19
Mohammad Olfatmiri

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")));
        }
0
Nirmala