Formato di serializzazione predefinito per TimeSpan
System.Text.Json ha aggiunto il supporto per TimeSpan in .NET 6 GA, tuttavia questa modifica non includeva il supporto per i generatori di origine. Nella versione di manutenzione 6.0.2 di .NET 6, System.Text.Json include il supporto per la serializzazione dei generatori di origine dei valori TimeSpan. Questo supporto modifica il formato di serializzazione predefinito per i valori TimeSpan nei generatori di origine.
Comportamento precedente
In .NET 6 GA, i generatori di origine serializzano i valori TimeSpan visualizzando tutte le proprietà pubbliche del tipo, ovvero il comportamento di serializzazione predefinito per gli oggetti:
{"days":2,"hours":0,"milliseconds":0,"minutes":0,"seconds":1,"ticks":1728010000000,"totalDays":2.0000115740740743,"totalHours":48.000277777777775,"totalMilliseconds":172801000,"totalMinutes":2880.016666666667,"totalSeconds":172801}
Nuovo comportamento
Nella versione di manutenzione .NET 6.0.2, i generatori di origine serializzano i valori TimeSpan nel formato seguente, coerente con il formato del serializzatore basato sulla reflection:
"2.00:00:01"
Versione introdotta
.NET 6.0.2 (versione di manutenzione)
Tipo di modifica che causa un'interruzione
Questa modifica potrebbe influire sulla compatibilità binaria.
Motivo della modifica
La generazione di origine System.Text.Json è una nuova funzionalità e il suo comportamento di serializzazione deve essere il più coerente possibile con il serializzatore basato sulla reflection. Questa modifica semplifica la migrazione ai generatori di origine.
Azione consigliata
È improbabile che gli utenti dipendano dal formato di serializzazione TimeSpan corrente, perché restituisce in modo ridondante tutte le proprietà pubbliche del tipo (ovvero il comportamento di serializzazione predefinito per gli oggetti) e non esegue il round trip.
Se dipendi dal comportamento esistente, la linea d’azione consigliata consiste nel creare un convertitore personalizzato che restituisce le proprietà necessarie da TimeSpan:
public class TimeSpanConverter : JsonConverter<TimeSpan>
{
public void WriteValue(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WriteNumber("days", value.Days);
writer.WriteNumber("hours", value.Hours);
/* insert any needed properties here */
writer.WriteEndObject();
}
}