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
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Utilizzare il trigger SQL con le Azure Function
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Gestire il colore CSS con HWB
Scrivere selettori CSS più semplici ed efficienti con :is()
Change tracking e composition in Entity Framework
Eliminare una project wiki di Azure DevOps
Gestione degli stili CSS con le regole @layer
Utilizzare l'espressione if inline in una pipeline di Azure DevOps
I più letti di oggi
- Anonimizzare i dati sensibili nei log di Azure Front Door
- Annunciato Visual Studio 2013: la prima preview a fine mese a Build
- Loggare le query più lente con Entity Framework
- Utilizzare WhenEach per processare i risultati di una lista di task
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!