У меня API выглядит следующим образом:
public Task<IActionResult> GetAsync([FromRoute] string id, [FromQuery] Query select = Query.All)
Для запросов мы хотим разрешить только определенные свойства, перечисленные в перечислении Query, как показано ниже:
public enum Query
{
All,
Property1,
Property2
}
я добавил
services.AddSwaggerGen(c =>{c.DescribeAllEnumsAsStrings();})
в startup.cs, но это не работает для значения по умолчанию, я получаю следующее сгенерированное swagger, значение по умолчанию равно 0 вместо строки:
{
"name": "selec",
"in": "query",
"description": "",
"required": false,
"type": "string",
"default": 0, //NOT SHOWN AS STRING
"enum": [
"none",
"property1",
"property2"
]
},
Как сделать так, чтобы значение по умолчанию отображалось в виде строки?
Ваш проект автоматически десериализуется в соответствии с настройками сериализации вашего приложения, обходной путь заключается в добавлении тега, который изменяет сериализацию этого конкретного свойства.
[JsonConverter(typeof(StringEnumConverter))]
Обновлено: при запуске вы можете ввести свои параметры json для сериализации перечислений в строки следующим образом:
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.Converters.Add(new StringEnumConverter(true));
});
@BenZifkin этот подход находится прямо над вашим свойством класса, которое соответствует перечислению. для конфигурации запуска проверьте редактирование
куда добавить этот тег? Когда я смотрю на то, что генерирует SDK swagger, я вижу это там, но я не понимаю, как добавить его в код, чтобы он правильно сериализовался.