ASP.NET MVC Core 3.0 API Serialize Enums a String

14

¿Cómo serializar campos Enum a String en lugar de Int en ASP.NET MVC Core 3.0? No puedo hacerlo a la vieja usanza.

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

Recibo un error:

no se puede convertir de 'Newtonsoft.Json.Converters.StringEnumConverter' a 'System.Text.Json.Serialization.JsonConverter'

Andrei
fuente
ASP.NET Core 3.0 no incluye JSON.NET, lo que significa que tuvo que agregar el paquete explícitamente antes de probar este código
Panagiotis Kanavos

Respuestas:

28

Nueva serialización System.Text.Json

ASP.NET MVC Core 3.0 utiliza la serialización JSON incorporada. Uso System.Text.Json.Serialization.JsonStringEnumConverter(con el prefijo "Json"):

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

Más información aquí . La documentación se puede encontrar aquí .

Si prefieres Newtonsoft.Json

También puede usar la serialización Newtonsoft.Json "tradicional":

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
Andrei
fuente
66
Si tiene una API web, en lugar de .AddMvc()también puede usarla services.AddControllers().AddJsonOptions(...).
Tobias