2016-02-16 24 views
7

Ho un endpoint WebAPI che implementa due diverse versioni dell'API (legacy e new). Gli endpoint legacy utilizzano uno specifico serializzatore con tutti gli oggetti serializzati come parole minuscole con caratteri di sottolineatura, mentre l'endpoint v2 utilizza i nomi di proprietà cased cammello. Ad esempio, V1 = "DOCUMENT_TYPE" e V2 = "DocumentType"Come configurare serializzatore personalizzato Swagger/Swashbuckle IControllerConfiguration ASP.NET WebAPI

Questo è attualmente realizzato utilizzando attributi specifici controller per definire la serializzazione, così:

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

Tutto questo funziona bene quando chiamato da un client tramite REST, ma la documentazione generata da Swagger mostra sempre i nomi delle proprietà utilizzando le impostazioni del serializzatore precedente. Qualche suggerimento sulla configurazione di swashbuckle per serializzare correttamente ogni versione?

risposta

0

per quanto ne so lo swagger utilizza le prime impostazioni Formatters che possono trovare. quindi se si utilizza questo:

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

la documentazione generata da Swagger andrà bene. swagger è una libreria molto buona e spero che possano risolvere presto questo problema.

Problemi correlati