Restituire gli enum come stringhe in ASP.NET Core Web API

di , in ASP.NET Core,

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

Visualizza/aggiungi commenti

Restituire gli enum come stringhe in ASP.NET Core Web API (#1321) 1010 2
| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi