API do ASP.NET MVC Core 3.0 serializa enums para String

14

Como serializar campos Enum para String em vez de um Int no ASP.NET MVC Core 3.0? Eu não sou capaz de fazer isso da maneira antiga.

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

Estou recebendo um erro:

não pode converter de 'Newtonsoft.Json.Converters.StringEnumConverter' para 'System.Text.Json.Serialization.JsonConverter'

Andrei
fonte
O ASP.NET Núcleo 3.0 não incluem JSON.NET que significa que você teve que adicionar o pacote explicitamente antes de tentar este código
Panagiotis Kanavos

Respostas:

28

Nova serialização System.Text.Json

O ASP.NET MVC Core 3.0 usa serialização JSON interna. Use System.Text.Json.Serialization.JsonStringEnumConverter(com o prefixo "Json"):

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

Mais informações aqui . A documentação pode ser encontrada aqui .

Se você preferir Newtonsoft.Json

Você também pode usar a serialização "tradicional" de Newtonsoft.Json:

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
Andrei
fonte
6
Se você possui uma API da Web, em vez de .AddMvc()também pode usá-lo services.AddControllers().AddJsonOptions(...).
Tobias