web-dev-qa-db-de.com

Wie stelle ich die Einstellungen für den JSON-Serializer in asp.net Core 3 ein?

die Einstellungen für den json-Serializer für ältere asp.net-Kernanwendungen wurden durch Hinzufügen von AddMvc().AddJsonOptions() festgelegt, aber ich verwende AddMvc() in asp.net core 3 nicht. Wie kann ich globale JSON-Serialisierungseinstellungen festlegen?

28
Alex Zaitsev

AddMvc gibt eine IMvcBuilder Implementierung zurück, die eine entsprechende AddJsonOptions Erweiterungsmethode hat. Die neuen Methoden AddControllers, AddControllersWithViews und AddRazorPages geben auch eine IMvcBuilder -Implementierung zurück. Verketten Sie diese auf die gleiche Weise, wie Sie sie mit AddMvc verketten würden:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        // ...
    });

Beachten Sie, dass options hier nicht mehr für Json.NET gilt, sondern für das neuere System.Text.Json APIs. Wenn Sie Json.NET weiterhin verwenden möchten, lesen Sie Antwort von tymtam

19
Kirk Larkin

Option A. AddController

Dies ist immer noch MVC und erfordert das Nuget-Paket Microsoft.AspNetCore.Mvc.NewtonsoftJson, aber Sie sagten, Sie verwenden AddControllers.

Von nterstützung für das JSON-Format auf Newtonsoft.Json-Basis hinzufügen

services.AddControllers().AddNewtonsoftJson(options =>
{
    // Use the default property (Pascal) casing
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();

    // Configure a custom converter
    options.SerializerOptions.Converters.Add(new MyCustomJsonConverter());
});

Option B. Standardeinstellungen

JsonConvert.DefaultSettings = () => new JsonSerializerSettings (...)

JsonConvert.DefaultSettings-Eigenschaft

Ruft eine Funktion ab oder legt diese fest, mit der Standard-JsonSerializerSettings erstellt werden. Die Standardeinstellungen werden automatisch von den Serialisierungsmethoden in JsonConvert und von ToObject () und FromObject (Object) in JToken verwendet. Um ohne Standardeinstellungen zu serialisieren, erstellen Sie mit Create () einen JsonSerializer.

17
tymtam

Das Hinzufügen von Newtonsoft ist nicht erforderlich, ein ziemliches Problem beim Hinzufügen von Newtonsoft-Kompatibilitätspaketen in einem .Net Core 3.0-Projekt.

Siehe auch https://github.com/aspnet/AspNetCore/issues/13564

Natürlich würde man im Moment die Eigenschaftsbezeichnung PascalCase, NA feiern ... Also bedeutet null für PropertyNamingPolicy PascalCase, was offensichtlich nicht sehr gut ist.

// Pascal casing
services.AddControllersWithViews().
        AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });
9
OSP