Deserialización del tipo de versión con espacio en blanco inicial o final

JsonSerializer ahora produce una excepción en la deserialización de tipos Version que tienen espacios en blanco iniciales o finales.

Comportamiento anterior

Antes de .NET 7, se permitía la serialización de tipos Version que tenían espacios en blanco iniciales o finales.

Comportamiento nuevo

A partir de .NET 7, JsonSerializer produce un FormatException en la deserialización de los tipos Version que tienen espacios en blanco iniciales o finales.

Versión introducida

.NET 7

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad binaria.

Motivo del cambio

.NET ha optimizado la implementación del convertidor subyacente Version. Esto dio lugar a que la implementación se hiciera para alinearse con el comportamiento de otros tipos primitivos que admite System.Text.Json, por ejemplo, DateTime y Guid, que tampoco permite espacios iniciales y finales.

Para recuperar el comportamiento anterior, agregue un convertidor personalizado para el tipo Version que permita espacios en blanco:

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 afectadas