Nello script precedente, abbiamo visto come serializzare il tipo DateOnly. In questo script ci occupiamo invece del tipo TimeOnly. Anche in questo caso, System.Text.Json non ne supporta la serializzazione e la deserializzazione, quindi queste operazioni falliranno se le effettuaiamo su un tipo TimeOnly o su un oggetto che ha una proprietà di tipo TimeOnly.
Così come per DateOnly, possiamo creare un converter anche per TimeOnly sfruttando gli stessi meccanismi. Il codice del converter è il seguente.
public class TimeOnlyJsonConverter : JsonConverter<TimeOnly> { public override TimeOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { int hours = 0; int minutes = 0; int seconds = 0; reader.Read(); while (reader.TokenType != JsonTokenType.EndObject) { if (reader.TokenType == JsonTokenType.PropertyName) { if (reader.GetString() == "hours") { reader.Read(); hours = reader.GetInt32(); } else if (reader.GetString() == "minutes") { reader.Read(); minutes = reader.GetInt32(); } else if (reader.GetString() == "seconds") { reader.Read(); seconds = reader.GetInt32(); } } reader.Read(); } return new TimeOnly(hours, minutes, seconds); } public override void Write(Utf8JsonWriter writer, TimeOnly value, JsonSerializerOptions options) { writer.WriteStartObject(); writer.WritePropertyName("hours"); writer.WriteNumberValue(value.Hours); writer.WritePropertyName("minutes"); writer.WriteNumberValue(value.Minutes); writer.WritePropertyName("seconds"); writer.WriteNumberValue(value.Seconds); writer.WriteEndObject(); } }
Per prima cosa, il converter deve ereditare da JsonConverter
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Recuperare l'ultima versione di una release di GitHub
Configurare automaticamente un webhook in Azure DevOps
Utilizzare una qualunque lista per i parametri di tipo params in C#
Ordine e importanza per @layer in CSS
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Scrivere selettori CSS più semplici ed efficienti con :is()
Combinare Container Queries e Media Queries
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Ottimizzare le performance usando Span<T> e il metodo Split
Controllare la telemetria con .NET Aspire
Gestione dell'annidamento delle regole dei layer in CSS