12

我有一个 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 生成的文档始终使用旧的序列化程序设置显示属性名称。关于配置 swashbuckle 以正确序列化每个版本的任何建议?

4

1 回答 1

1

据我所知,swagger 使用Formatters可以找到的第一个设置。所以如果你使用这个:

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

Swagger 生成的文档会很好。swagger 是一个非常好的库,我希望他们能尽快解决这个问题。

于 2017-11-26T06:12:11.757 回答