diff options
| author | Bond_009 <bond.009@outlook.com> | 2020-01-10 21:18:16 +0100 |
|---|---|---|
| committer | Bond_009 <bond.009@outlook.com> | 2020-01-10 21:18:16 +0100 |
| commit | bb236b95916c7fe0fc04fefbb409686ab289a758 (patch) | |
| tree | 72d32e64a7bc36777ad84c3503ccd33075c136db /MediaBrowser.Common | |
| parent | 7f5a174dff98c6071fc292a41bba63d1435c2ddd (diff) | |
| parent | 162c1ac7b7fde0e4929cf262b0f275e3eb15524c (diff) | |
Merge branch 'master' into warn12
Diffstat (limited to 'MediaBrowser.Common')
| -rw-r--r-- | MediaBrowser.Common/Json/Converters/JsonGuidConverter.cs (renamed from MediaBrowser.Common/Json/Converters/GuidConverter.cs) | 2 | ||||
| -rw-r--r-- | MediaBrowser.Common/Json/Converters/JsonInt32Converter.cs | 53 | ||||
| -rw-r--r-- | MediaBrowser.Common/Json/JsonDefaults.cs | 2 |
3 files changed, 55 insertions, 2 deletions
diff --git a/MediaBrowser.Common/Json/Converters/GuidConverter.cs b/MediaBrowser.Common/Json/Converters/JsonGuidConverter.cs index 3081e12ee..d35a761f3 100644 --- a/MediaBrowser.Common/Json/Converters/GuidConverter.cs +++ b/MediaBrowser.Common/Json/Converters/JsonGuidConverter.cs @@ -7,7 +7,7 @@ namespace MediaBrowser.Common.Json.Converters /// <summary> /// Converts a GUID object or value to/from JSON. /// </summary> - public class GuidConverter : JsonConverter<Guid> + public class JsonGuidConverter : JsonConverter<Guid> { /// <inheritdoc /> public override Guid Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) diff --git a/MediaBrowser.Common/Json/Converters/JsonInt32Converter.cs b/MediaBrowser.Common/Json/Converters/JsonInt32Converter.cs new file mode 100644 index 000000000..fe5dd6cd4 --- /dev/null +++ b/MediaBrowser.Common/Json/Converters/JsonInt32Converter.cs @@ -0,0 +1,53 @@ +using System; +using System.Buffers; +using System.Buffers.Text; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace MediaBrowser.Common.Json.Converters +{ + /// <summary> + /// Converts a GUID object or value to/from JSON. + /// </summary> + public class JsonInt32Converter : JsonConverter<int> + { + /// <inheritdoc /> + public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + static void ThrowFormatException() => throw new FormatException("Invalid format for an integer."); + ReadOnlySpan<byte> span = stackalloc byte[0]; + + if (reader.HasValueSequence) + { + long sequenceLength = reader.ValueSequence.Length; + Span<byte> stackSpan = stackalloc byte[(int)sequenceLength]; + reader.ValueSequence.CopyTo(stackSpan); + span = stackSpan; + } + else + { + span = reader.ValueSpan; + } + + if (!Utf8Parser.TryParse(span, out int number, out _)) + { + ThrowFormatException(); + } + + return number; + } + + /// <inheritdoc /> + public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options) + { + static void ThrowInvalidOperationException() => throw new InvalidOperationException(); + Span<byte> span = stackalloc byte[16]; + if (Utf8Formatter.TryFormat(value, span, out int bytesWritten)) + { + writer.WriteStringValue(span.Slice(0, bytesWritten)); + } + + ThrowInvalidOperationException(); + } + } +} diff --git a/MediaBrowser.Common/Json/JsonDefaults.cs b/MediaBrowser.Common/Json/JsonDefaults.cs index 4ba0d5a1a..4a6ee0a79 100644 --- a/MediaBrowser.Common/Json/JsonDefaults.cs +++ b/MediaBrowser.Common/Json/JsonDefaults.cs @@ -21,7 +21,7 @@ namespace MediaBrowser.Common.Json WriteIndented = false }; - options.Converters.Add(new GuidConverter()); + options.Converters.Add(new JsonGuidConverter()); options.Converters.Add(new JsonStringEnumConverter()); return options; |
