Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
System.Text.Json a ajouté la prise en charge de TimeSpan dans .NET 6 GA, mais cette modification n’incluait pas la prise en charge des générateurs de source. Dans la version de maintenance 6.0.2 de .NET 6, System.Text.Json inclut le support de la sérialisation des valeurs TimeSpan du générateur source. Ce support modifie le format de sérialisation par défaut pour les valeurs TimeSpan dans les générateurs sources.
Comportement précédent
Dans .NET 6 GA, les générateurs de code source sérialisent TimeSpan les valeurs en émettant toutes les propriétés publiques du type, ce qui est le comportement de sérialisation par défaut pour les objets :
{"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}
Nouveau comportement
Dans la version de service .NET 6.0.2, les générateurs de code source sérialisent les valeurs TimeSpan selon le format suivant, qui est cohérent avec le format de sérialiseur basé sur la réflexion :
"2.00:00:01"
Version introduite
.NET 6.0.2 (version de maintenance)
Type de changement cassant
Cette modification peut affecter la compatibilité binaire.
Raison de la modification
La génération de source System.Text.Json est une nouvelle fonctionnalité et son comportement de sérialisation doit être aussi cohérent que possible avec le sérialiseur basé sur la réflexion. Cette modification simplifie la migration vers les générateurs sources.
Action recommandée
Il est peu probable que les utilisateurs dépendent du format de sérialisation actuel TimeSpan , car il génère de manière redondante toutes les propriétés publiques du type (qui est le comportement de sérialisation par défaut pour les objets), et il n’effectue pas d’aller-retour.
Si vous dépendez du comportement existant, le cours d’action recommandé est de créer un convertisseur personnalisé qui génère les propriétés nécessaires à partir de 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();
}
}