ASP.NET MVC Core 3.0 API Serialize Enums to String

14

Wie serialisiere ich Enum-Felder in ASP.NET MVC Core 3.0 in String anstelle eines Int? Ich kann es nicht so machen wie früher.

services.AddMvc().AddJsonOptions(opts =>
{
    opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter());
})

Ich erhalte eine Fehlermeldung:

kann nicht von 'Newtonsoft.Json.Converters.StringEnumConverter' in 'System.Text.Json.Serialization.JsonConverter' konvertieren

Andrei
quelle
ASP.NET Core 3.0 enthält kein JSON.NET, was bedeutet, dass Sie das Paket explizit hinzufügen mussten, bevor Sie diesen Code
ausprobieren konnten

Antworten:

28

Neue System.Text.Json-Serialisierung

ASP.NET MVC Core 3.0 verwendet die integrierte JSON-Serialisierung. Verwendung System.Text.Json.Serialization.JsonStringEnumConverter(mit dem Präfix "Json"):

services
    .AddMvc()
    // Or .AddControllers(...)
    .AddJsonOptions(opts =>
    {
        opts.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
    })

Mehr Infos hier . Die Dokumentation finden Sie hier .

Wenn Sie Newtonsoft.Json bevorzugen

Sie können auch die "traditionelle" Newtonsoft.Json-Serialisierung verwenden:

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
Andrei
quelle
6
Wenn Sie eine Web-API haben .AddMvc(), können Sie diese stattdessen auch verwenden services.AddControllers().AddJsonOptions(...).
Tobias