L'API ASP.NET MVC Core 3.0 sérialise les énumérations en chaîne

14

Comment sérialiser des champs Enum en chaîne au lieu d'un int dans ASP.NET MVC Core 3.0? Je ne peux pas le faire à l'ancienne.

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

Je reçois une erreur:

impossible de convertir de 'Newtonsoft.Json.Converters.StringEnumConverter' en 'System.Text.Json.Serialization.JsonConverter'

Andrei
la source
ASP.NET Core 3.0 n'inclut pas JSON.NET, ce qui signifie que vous avez dû ajouter explicitement le package avant d'essayer ce code
Panagiotis Kanavos

Réponses:

28

Nouvelle sérialisation System.Text.Json

ASP.NET MVC Core 3.0 utilise la sérialisation JSON intégrée. Utilisation System.Text.Json.Serialization.JsonStringEnumConverter(avec le préfixe "Json"):

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

Plus d'infos ici . La documentation se trouve ici .

Si vous préférez Newtonsoft.Json

Vous pouvez également utiliser la sérialisation "traditionnelle" de Newtonsoft.Json:

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
Andrei
la source
6
Si vous avez une API Web, .AddMvc()vous pouvez également l'utiliser à la place services.AddControllers().AddJsonOptions(...).
Tobias