2015-04-17 26 views
12

Sto utilizzando Swashbuckle 5 nel mio progetto webapi ASP.NET con tutte le impostazioni predefinite. Serializza l'output del mio metodo per mostrarmi lo schema della risposta. Io sono sempre la documentazione che assomiglia a questo:k__BackingField rimuovi in ​​C# (visto tramite Swashbuckle/Swagger)

Response Class (Status 200) 
Model Model Schema 
[ 
    { 
    "<Key>k__BackingField": "string", 
    "<Value>k__BackingField": "string", 
    "<Id>k__BackingField": 0 
    } 
] 

Viene generato dal seguente codice C#

/// <summary> 
    ///  Fetches all system configuration items 
    /// </summary> 
    /// <returns>List of <see cref="SystemConfigurationDto" /> items</returns> 
    public IList<SystemConfigurationDto> GetAllSystemConfigurationItems() 
    { 
     var result = CommandProcessor.ProcessCommand(new SystemConfigurationQueryCommand()) as SystemConfigurationQueryCommandResponse; 

     return result.Results.ToList(); 
    } 

dove result.Results è fondamentalmente uno standard Elenco di oggetti, ognuno dei quali contiene questi chiave/valore/id campi. Ho letto qui https://conficient.wordpress.com/2014/05/22/getting-rid-of-k__backingfield-in-serialization/ che l'attributo [serializzabile] potrebbe influire su questo, ma non sono disposto a sbarazzarmi di quell'attributo, se possibile. C'è qualche ricetta per regolare questo artefatto di serializzazione?

risposta

20

aggiungere questo alla WebApiConfig.cs:

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = 
    new DefaultContractResolver { IgnoreSerializableAttribute = true }; 

questo risolve il problema per le classi contrassegnati con [Serializable]. Ho anche problemi intermittenti anche se nessuna classe ha quell'attributo, quindi uso sempre questa impostazione ora.

+0

Questo mi ha avuto tutta la mattina. L'ho riscontrato all'improvviso questa mattina dopo aver aggiornato alcuni pacchetti NuGet. La soluzione ha funzionato in precedenza bene per diversi mesi. L'attributo '[Serializable]' non è, e non è mai stato, usato ovunque. L'aggiunta di questo snippet di codice l'ha risolta. Molto obbligato signore! – ceej

+0

Grazie, ha funzionato anche per me – spooti