Désérialiser le type de version avec un espace de début ou de fin

JsonSerializer lève maintenant une exception lors de la désérialisation des types Version qui ont des espaces de début ou de fin.

Comportement précédent

Avant .NET 7, la désérialisation des types Version qui ont des espaces de début ou de fin était autorisée.

Nouveau comportement

À compter de .NET 7, JsonSerializer lève une FormatException lors de la désérialisation des types Version qui ont un espace de début ou de fin.

Version introduite

.NET 7

Type de changement cassant

Ce changement peut affecter la compatibilité binaire.

Raison du changement

.NET a optimisé l’implémentation du convertisseur sous-jacent Version. Cela a entraîné l’implémentation de l’alignement sur le comportement d’autres types primitifs pris en charge par System.Text.Json, par exemple, DateTime et Guid, qui interdisent également les espaces de début et de fin.

Pour récupérer l’ancien comportement, ajoutez un convertisseur personnalisé pour le type Version qui autorise les espaces :

internal sealed class VersionConverter : JsonConverter<Version>
{
    public override Version Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        string? versionString = reader.GetString();
        if (Version.TryParse(versionString, out Version? result))
        {
            return result;
        }

        ThrowHelper.ThrowJsonException();
        return null;
    }

    public override void Write(Utf8JsonWriter writer, Version value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString());
    }
}

API affectées