共用方式為


使用前置或尾端空格將版本型別還原序列化

JsonSerializer 現在會在還原序列化包含前置或尾端空白字元的 Version 類型時擲回例外狀況。

先前的行為

在 .NET 7 之前,允許還原序列化具有前置或結尾空格的 Version 類型。

新的行為

自 .NET 7 起,JsonSerializer 會在還原序列化具有前置或結尾空格的 Version 類型時擲回 FormatException

導入的版本

.NET 7

中斷性變更的類型

這項變更會影響二進位相容性

變更原因

.NET 已最佳化了基礎 Version 轉換器的實作。 也因此讓實作的行為,和 System.Text.Json 支援之其他基本類型 (例如 DateTimeGuid) 的行為一致,同時也不允許前置和尾端空格。

若要恢復舊的行為,請為 Version 類型新增自訂轉換器來允許空白字元:

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