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
Routing statico e PreRendering in una Blazor Web App
Criptare la comunicazione con mTLS in Azure Container Apps
Installare le Web App site extension tramite una pipeline di Azure DevOps
Utilizzare politiche di resiliency con Azure Container App
Creazione di componenti personalizzati in React.js con Tailwind CSS
Gestire undefined e partial nelle reactive forms di Angular
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Eseguire query verso tipi non mappati in Entity Framework Core
Miglioramenti nelle performance di Angular 16
Implementare il throttling in ASP.NET Core
Code scanning e advanced security con Azure DevOps
Evitare la command injection in un workflow di GitHub
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)