ASP.NET MVC Core 3.0 API сериализует перечисления в строку

14

Как сериализовать поля Enum в String вместо Int в ASP.NET MVC Core 3.0? Я не могу сделать это по-старому.

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

Я получаю сообщение об ошибке:

невозможно преобразовать из 'Newtonsoft.Json.Converters.StringEnumConverter' в 'System.Text.Json.Serialization.JsonConverter'

Андрей
источник
ASP.NET Core 3.0 не включает JSON.NET, что означает, что вам пришлось явно добавить пакет, прежде чем пытаться использовать этот код
Panagiotis Kanavos

Ответы:

28

Новая сериализация System.Text.Json

ASP.NET MVC Core 3.0 использует встроенную сериализацию JSON. Используйте System.Text.Json.Serialization.JsonStringEnumConverter(с префиксом "Json"):

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

Больше информации здесь . Документацию можно найти здесь .

Если вы предпочитаете Newtonsoft.Json

Вы также можете использовать «традиционную» сериализацию Newtonsoft.Json:

services
    .AddControllers()
    .AddNewtonsoftJson(opts => opts.Converters.Add(new StringEnumConverter()));
Андрей
источник
6
Если у вас есть веб-API, то вместо .AddMvc()вас также можно использовать services.AddControllers().AddJsonOptions(...).
Тобиас