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'


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()));

6
Se você possui uma API da Web, em vez de .AddMvc()também pode usá-lo services.AddControllers().AddJsonOptions(...).
Tobias
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.