Как настроить пользовательский сериализатор Swagger / Swashbuckle IControllerConfiguration ASP.NET WebAPI

У меня есть конечная точка WebAPI, которая реализует две разные версии API (устаревшую и новую). Устаревшие конечные точки используют специальный сериализатор, в котором все объекты сериализованы как слова нижнего регистра с подчеркиванием, конечная точка v2 использует имена свойств в верблюжьем регистре. Например, V1 = "document_type" и V2 = "documentType".

В настоящее время это достигается с помощью атрибутов контроллера для определения сериализации, например:

public class CamelCaseControllerConfiguration : Attribute, IControllerConfiguration
{
    public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
    {
        controllerSettings.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        controllerSettings.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
    }
}

Все это отлично работает при вызове из клиента через REST, но документация, созданная Swagger, всегда показывает имена свойств с использованием устаревших настроек сериализатора. Есть предложения по настройке автомата для правильной сериализации каждой версии?


person Kris    schedule 16.02.2016    source источник
comment
Удалось ли вам этого добиться?   -  person Maksim Ramanovich    schedule 18.12.2019


Ответы (1)


Насколько я знаю, swagger использует первые Formatters настройки, которые можно найти. поэтому, если вы используете это:

controllerSettings.Formatters.Insert(0, new JsonMediaTypeFormatter { SerializerSettings = { ContractResolver = new CamelCasePropertyNamesContractResolver() } });

ваша документация, созданная Swagger, будет в порядке. swagger - очень хорошая библиотека, и я надеюсь, что они скоро исправят эту проблему.

person Mohammad    schedule 26.11.2017