Формат отображения в пользовательском интерфейсе swagger для свойств массива

#asp.net-core #swagger-ui #swashbuckle.aspnetcore

Вопрос:

Мне нужно обмануть суэггера, что мои фильтры-это не массив, а строковый тип, поэтому моя привязка преобразует строку json в реальный массив.

 public class myBinder : IModelBinder
{

    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        var l = new myLoadOptions();
        var filters = bindingContext.ValueProvider.GetValue("filters").FirstOrDefault();
        l.Filters = Newtonsoft.Json.JsonConvert.DeserializeObject<string[][]>(filters);
        bindingContext.Result = ModelBindingResult.Success(l);
        return Task.CompletedTask;
    }
}
[ModelBinder(BinderType = typeof(myBinder))]
public class myLoadOptions
{
    [DataType(DataType.Text)]
    [Column(TypeName ="string")]
    [DisplayFormat(DataFormatString = "[['field','operator','value']]")]
    [Display(Name ="filters",AutoGenerateField =false, AutoGenerateFilter =false)]
    public string[][] Filters { get;  set; }
}
 

И действия контроллера

 [HttpGet("[action]")]
public ActionResult<int> Get(myLoadOptions loadOptions)
{

    return Ok(1);
}
 

Однако swagger по-прежнему показывает, что тип-массив, а не строка, и явно не тот формат, который я указал
введите описание изображения здесь

 I want swagger to show  property like this
{
"filters":"[['field','operator','value']]")
}
 

Нет никаких проблем с получением данных , только с отображением

Применение: .Net5

Чванство : Дерзость.AspNetCore 5.6.3

Комментарии:

1. Есть какие-нибудь предложения?