У меня есть. Net Core 3.1 Web Api. Я использую System.Text.Json
сериализатор, так как он стал по умолчанию для. Net Core 3.x приложений. Я установил глобальное перечисление в строковый преобразователь следующим образом:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllers()
.AddJsonOptions(options =>
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter())));
...
}
Перечисления преобразуются в строку для ответов контроллера (что имеет смысл, поскольку я настраиваю метод AddControllers()
). Но если я попытаюсь вручную сериализовать объект, он все равно сериализует enum как int. Пример ниже:
public class TestClass
{
public void Test()
{
var data = JsonSerializer.Serialize(new MyObject { Enum1 = MyEnum.Value1, Enum2 = MyEnum.Value2 });
}
public class MyObject
{
public MyEnum Enum1 { get; set; }
public MyEnum Enum2 { get; set; }
}
public enum MyEnum
{
Value1 = 1,
Value2 = 2
}
}
ВЫХОД:
data [string]: "{\"Enum1\":1,\"Enum2\":2}"
Если я добавляю атрибут преобразования вручную, он сериализуется по желанию:
public class MyObject
{
[JsonConverter(typeof(JsonStringEnumConverter))]
public MyEnum Enum1 { get; set; }
public MyEnum Enum2 { get; set; }
}
OUTPUT
data [string]: "{\"Enum1\":\"Value1\",\"Enum2\":2}"
Есть ли способ установить глобальные опции сериализации json (перечисление в строку), которые также будут применяться для сериализации вручную?
Или, может быть, мне всегда следует придерживаться явных атрибутов?