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
Inizializzare i container in Azure Container Apps
Specificare il versioning nel path degli URL in ASP.NET Web API
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Sfruttare al massimo i topic space di Event Grid MQTT
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Evitare la command injection in un workflow di GitHub
C# 12: Cosa c'è di nuovo e interessante
Disabilitare automaticamente un workflow di GitHub
Gestire liste di tipi semplici con Entity Framework Core