使用前置或尾端空格將版本型別還原序列化
JsonSerializer 現在會在還原序列化包含前置或尾端空白字元的 Version 類型時擲回例外狀況。
先前的行為
在 .NET 7 之前,允許還原序列化具有前置或結尾空格的 Version 類型。
新的行為
自 .NET 7 起,JsonSerializer 會在還原序列化具有前置或結尾空格的 Version 類型時擲回 FormatException。
導入的版本
.NET 7
中斷性變更的類型
這項變更會影響二進位相容性。
變更原因
.NET 已最佳化了基礎 Version 轉換器的實作。 也因此讓實作的行為,和 System.Text.Json 支援之其他基本類型 (例如 DateTime 和 Guid) 的行為一致,同時也不允許前置和尾端空格。
建議的動作
若要恢復舊的行為,請為 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());
}
}