<PackageReference Include="System.Text.Json" Version="8.0.1" />

VersionConverter

namespace System.Text.Json.Serialization.Converters { internal sealed class VersionConverter : JsonPrimitiveConverter<Version> { public override Version Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Null) return null; if (reader.TokenType != JsonTokenType.String) ThrowHelper.ThrowInvalidOperationException_ExpectedString(reader.TokenType); return ReadCore(ref reader); } private unsafe static Version ReadCore(ref Utf8JsonReader reader) { if (!JsonHelpers.IsInRangeInclusive(reader.ValueLength, 3, 258)) ThrowHelper.ThrowFormatException(DataType.TimeSpan); Span<char> span = new Span<char>(stackalloc byte[516], 258); Span<char> destination = span; int length = reader.CopyString(destination); ReadOnlySpan<char> input = destination.Slice(0, length); if (!char.IsDigit(input[0]) || !char.IsDigit(input[input.Length - 1])) ThrowHelper.ThrowFormatException(DataType.Version); if (Version.TryParse(input, out Version result)) return result; ThrowHelper.ThrowJsonException(null); return null; } public unsafe override void Write(Utf8JsonWriter writer, Version value, JsonSerializerOptions options) { if ((object)value == null) writer.WriteNullValue(); else { Span<char> span = new Span<char>(stackalloc byte[86], 43); Span<char> destination = span; int charsWritten; bool flag = value.TryFormat(destination, out charsWritten); writer.WriteStringValue(destination.Slice(0, charsWritten)); } } internal override Version ReadAsPropertyNameCore(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return ReadCore(ref reader); } internal unsafe override void WriteAsPropertyNameCore(Utf8JsonWriter writer, Version value, JsonSerializerOptions options, bool isWritingExtensionDataProperty) { if ((object)value == null) ThrowHelper.ThrowArgumentNullException("value"); Span<char> span = new Span<char>(stackalloc byte[86], 43); Span<char> destination = span; int charsWritten; bool flag = value.TryFormat(destination, out charsWritten); writer.WritePropertyName(destination.Slice(0, charsWritten)); } } }