Interfejs API ASP.NET MVC Core 3.0 szereguje wyliczenia do ciągów

13

Jak serializować pola Enum do String zamiast Int w ASP.NET MVC Core 3.0? Nie jestem w stanie zrobić tego po staremu.

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

Pojawia się błąd:

nie można przekonwertować z „Newtonsoft.Json.Converters.StringEnumConverter” na „System.Text.Json.Serialization.JsonConverter”

Andrei
źródło
Program ASP.NET Core 3.0 nie obejmuje JSON.NET, co oznacza, że ​​przed wypróbowaniem tego kodu trzeba było wyraźnie dodać pakiet
Panagiotis Kanavos

Odpowiedzi:

28

Nowa serializacja System.Text.Json

Program ASP.NET MVC Core 3.0 korzysta z wbudowanej serializacji JSON. Użyj System.Text.Json.Serialization.JsonStringEnumConverter(z prefiksem „Json”):

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

Więcej informacji tutaj . Dokumentację można znaleźć tutaj .

Jeśli wolisz Newtonsoft.Json

Możesz także użyć „tradycyjnej” serializacji Newtonsoft.Json:

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
Andrei
źródło
6
Jeśli masz interfejs API sieci Web .AddMvc(), możesz zamiast tego również użyć services.AddControllers().AddJsonOptions(...).
Tobias