2016-02-16 12 views
7

APIの2つの異なるバージョン(レガシーおよび新規)を実装するWebAPIエンドポイントがあります。従来のエンドポイントでは、すべてのオブジェクトが下線付きの小文字の単語としてシリアル化されている特定のシリアライザを使用します。v2エンドポイントでは、ラクダに基づいたプロパティ名が使用されます。Swagger/Swashbuckleカスタムシリアライザを構成する方法IControllerConfiguration ASP.NET WebAPI

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()); 
    } 
} 

このクライアントから呼び出されたときに、すべてが正常に動作します:例えば、V1 =「DOCUMENT_TYPE」とV2 =「のDocumentType」

は、これはそうのように、シリアル化を定義するために、コントローラの特定の属性を使用して、現在達成され、 RESTを使用していますが、Swaggerによって生成されたドキュメントには、従来のシリアライザ設定を使用したプロパティ名が常に表示されます。 swashbuckleを設定して各バージョンを正しくシリアル化するための提案はありますか?

答えて

0

私が知っている限り、最初に見つけることができるFormattersの設定です。これを使用する場合:

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

スワッガーによって生成されたドキュメントは問題ありません。 swaggerは非常に優れたライブラリであり、すぐにこの問題を解決できることを願っています。

関連する問題