webentwicklung-frage-antwort-db.com.de

Wohin ging IMvcBuilder AddJsonOptions in .Net Core 3.0?

Ich habe gerade mein ASP Web-API-Projekt von .Net core 2.0 bis 3.0. Ich habe benutzt

     services.AddMvc()
             .AddJsonOptions(options =>options.SerializerSettings.ContractResolver 
                                       = new DefaultContractResolver());

zuvor, um das untere Gehäuse des serialisierten JSON sicherzustellen.

Nach dem Upgrade auf 3.0 erhalte ich folgende Fehlermeldung:

Fehler CS1061 'IMvcBuilder' enthält keine Definition für 'AddJsonOptions' und es konnte keine zugängliche Erweiterungsmethode 'AddJsonOptions' gefunden werden, die ein erstes Argument vom Typ 'IMvcBuilder' akzeptiert (fehlt Ihnen eine using-Direktive oder eine Assembly-Referenz?)

Gemäß AddJsonOptions für MvcJsonOptions in Asp.Net Core 2.2 wird/wurde die AddJsonOptions-Erweiterungsmethode vom Microsoft.AspNetCore.Mvc.Formatters.Json -Nuget bereitgestellt Paket. Ich habe versucht, dies zu installieren/neu zu installieren, kann die Methode jedoch immer noch nicht auflösen. Interessanterweise zeigt Intellisense nur Microsoft.AspNetCore.Mvc.Formatters. Xml an, wenn ich versuche, die using-Anweisung hinzuzufügen, obwohl ich das Nuget-Paket Json hinzugefügt habe.

Irgendwelche Ideen, was los ist? Die Dokumentation für AddJsonOptions reicht nur bis zu .Net 2.2. Vielleicht wurde die Methode in 3.0 zugunsten eines anderen Konfigurationsmechanismus veraltet?

93
NeilMacMullen

Als Teil von ASP.NET Core 3.0 hat das Team standardmäßig Json.NET nicht mehr aufgenommen. Weitere Informationen hierzu finden Sie im Allgemeinen unter Ankündigung zum Abbrechen von Änderungen an Microsoft.AspNetCore.App .

Anstelle von Json.NET enthalten ASP.NET Core 3.0 und .NET Core 3.0 eine andere JSON-API, die sich etwas mehr auf die Leistung konzentriert. Weitere Informationen hierzu finden Sie in der Ankündigung zu „Die Zukunft von JSON in .NET Core 3.0“ .

Die neuen Vorlagen für ASP.NET Core werden nicht mehr mit Json.NET gebündelt, aber Sie können das Projekt einfach neu konfigurieren, um es anstelle der neuen JSON-Bibliothek zu verwenden. Dies ist sowohl für die Kompatibilität mit älteren Projekten als auch wichtig, da die neue Bibliothek kein vollständiger Ersatz sein soll, sodass dort nicht alle Funktionen angezeigt werden.

Um Ihr ASP.NET Core 3.0-Projekt mit Json.NET neu zu konfigurieren, müssen Sie einen NuGet-Verweis auf Microsoft.AspNetCore.Mvc.NewtonsoftJson, das ist das Paket, das alle erforderlichen Bits enthält. Dann müssen Sie in ConfigureServices des Startups MVC wie folgt konfigurieren:

services.AddControllers()
    .AddNewtonsoftJson();

Dadurch werden MVC-Controller eingerichtet und so konfiguriert, dass Json.NET anstelle dieser neuen API verwendet wird. Anstelle von Controllern können Sie auch eine andere MVC-Überlastung verwenden (z. B. für Controller mit Ansichten oder Rasiermesserseiten). Diese AddNewtonsoftJson -Methode weist eine Überladung auf, mit der Sie die Json.NET-Optionen so konfigurieren können, wie Sie es mit AddJsonOptions in ASP.NET Core 2.x gewohnt waren.

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });
135
poke

Das hat bei mir funktioniert (.net Core 3)

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

Das würde helfen

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