73 votes

ASP.NET MVC Core API Serialize Enums to String (Sérialiser les Enums en chaînes de caractères)

Comment sérialiser les champs Enum en String au lieu de Int dans ASP.NET MVC Core 3.0 ? Je ne suis pas en mesure de le faire de l'ancienne façon.

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

Je reçois une erreur :

ne peut pas convertir de 'Newtonsoft.Json.Converters.StringEnumConverter' vers 'System.Text.Json.Serialization.JsonConverter'

0 votes

ASP.NET Core 3.0 n'inclut pas JSON.NET, ce qui signifie que vous avez dû ajouter le paquet explicitement avant d'essayer ce code.

158voto

Andrei Mikhalevich Points 6372

Nouvelle sérialisation System.Text.Json

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

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

Plus d'informations aquí . La documentation se trouve à l'adresse suivante aquí .

Si vous préférez Newtonsoft.Json

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

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

Et puis.. :

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts
        .Converters.Add(new StringEnumConverter()));

20voto

J. Liu Points 136

Quelques ajouts :
en cas d'utilisation Newtonsoft.Json

Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson

services
    .AddControllers()
    .AddNewtonsoftJson(options =>
        options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()));

options.SerializerSettings.Converters

SerializerSettings est nécessaire

2voto

giorgi02 Points 114

Si vous avez un Minimal API cela sera utile :

using System.Text.Json.Serialization;

builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(opt =>
{
    opt.SerializerOptions.Converters.Add(new JsonStringEnumConverter());
});

0voto

Suici Doga Points 141

Si vous utilisez Aspnet Core MVC avec l'API minimale, utilisez ceci :

        services.Configure<Microsoft.AspNetCore.Mvc.JsonOptions>(o => o.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X