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
C# 12: Cosa c'è di nuovo e interessante
Eseguire i worklow di GitHub su runner potenziati
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Utilizzare QuickGrid di Blazor con Entity Framework
Utilizzare Container Queries nominali
Cancellare una run di un workflow di GitHub
Usare lo spread operator con i collection initializer in C#
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Cambiare la chiave di partizionamento di Azure Cosmos DB
Creare una custom property in GitHub