Quando una nostra action Web API restituisce un tipo enum, esso viene per default rappresentato con il suo valore integer. Per migliorare la leggibilità della risposta, tuttavia, potremmo voler preferire che esso venga restituito come stringa.
Immaginiamo per esempio di avere definito un enum CustomerType:
public enum CustomerType { Normal, Premium, Platinum }
e di utilizzarlo in una classe Customer:
public class Customer { public string Name { get; set; } public CustomerType Type { get; set; } }
Una action che restituisca un elenco di customer ritornerà una risposta JSON simile alla seguente:
[ { "name": "Marco", "type": 2 }, { "name": "Carlo", "type": 0 } ]
Possiamo modificare questo comportamento e ritonare l'enum in formato string, semplicemente aggiungendo un JsonConverterAttribute, o sulla definizione dell'enum o sulla proprietà che lo utilizza, specificando che vogliamo utilizzare StringEnumConverter.
public class Customer { public string Name { get; set; } [JsonConverter(typeof(StringEnumConverter))] public CustomerType Type { get; set; } }
Se però vogliamo estendere questa logica a tutti gli enum che esponiamo, possiamo impostare questo setting a livello globale nel metodo ConfigureServices:
public void ConfigureServices(IServiceCollection services) { services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .AddJsonOptions(options => { options.SerializerSettings.Converters.Add(new StringEnumConverter()); options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; }); // .. altro codice qui }
In questo modo la risposta che otterremo sarà come la seguente:
[ { "name": "Marco", "type": "Platinum" }, { "name": "Carlo", "type": "Normal" } ]
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare un KeyedService di default in ASP.NET Core 8
Utilizzare la session affinity con Azure Container Apps
Specificare il versioning nel path degli URL in ASP.NET Web API
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Criptare la comunicazione con mTLS in Azure Container Apps
Code scanning e advanced security con Azure DevOps
Utilizzare i primary constructor in C#
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Miglioramenti agli screen reader e al contrasto in Angular
Implementare l'infinite scroll con QuickGrid in Blazor Server
Verificare la provenienza di un commit tramite le GitHub Actions