Per default, la libreria System.Text.Json serializza e deserializza le proprietà di tipo Enum sfruttando il valore numerico. Sebbene questa funzionalità sia molto comoda, esistono dei casi in cui non possiamo usare il valore numerico, ma dobbiamo usare la stringa. Questo accade soprattutto quando dobbiamo comunicare con sistemi esterni e questi sono stati volutamente progettati per utilizzare le stringhe al posto dei numeri. In questi casi possiamo impostare il converter JsonStringEnumConverter nelle operazioni di serializzazione/deserializzazione. Come dice il nome della classe, questo converter utilizzerà il nome dell'enum e non il valore numerico.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Gender Gender { get; set; }
public Gender FavoriteGender { get; set; }
}
public enum Gender
{
Male,
Female
}
static void Main(string[] args)
{
var p = new Person()
{
FirstName = "Stefano",
LastName = "Mostarda",
Gender = Gender.Male,
FavoriteGender = Gender.Female
};
var options = new JsonSerializerOptions
{
Converters = { new JsonStringEnumConverter() }
};
Console.Write(JsonSerializer.Serialize(p, options));
Console.Read();
}In questo caso, tutte le proprietà che rappresentano un enum sono serializzate/deserializzate utilizzando il valore come stringa. Tuttavia possono esistere anche casi ibridi dove alcune proprietà di tipo enum sono serializzate/deserializzate come stringa mentre altre come numero. In questi casi possiamo lasciare la serializzazione di default, e decorare le proprietà di tipo enum che vogliamo trattare come stringhe con l'attributo JsonConverter passando in input il tipo JsonStringEnumConverter.
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonConverter(typeof(JsonStringEnumConverter))]
public Gender Gender { get; set; }
public Gender FavoriteGender { get; set; }
}
static void Main(string[] args)
{
var p = new Person()
{
FirstName = "Stefano",
LastName = "Mostarda",
Gender = Gender.Male,
FavoriteGender = Gender.Female
};
Console.Write(JsonSerializer.Serialize(p));
Console.Read();
}In questo caso, la proprietà Gender viene serializzata come stringa, mentre FavoriteGender viene serializzata come numero.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire query in contemporanea con EF
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Personalizzare le pagine di errore su Azure App Service
Controllare la velocità di spostamento su una pagina HTML
Esporre un server MCP esistente con Azure API Management
Utilizzare i variable font nel CSS
Esporre un server MCP con Azure API Management
Evidenziare una porzione di testo in un pagina dopo una navigazione
Integrazione di Copilot in .NET Aspire
Implementare il throttle in JavaScript
Ridimensionamento automatico input tramite CSS
Semplificare i deployment con le label in Azure Container App
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Sfruttare una CDN con i bundle di ASP.NET
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Gli oggetti CallOut di Expression Blend 4.0


