From 9b2359a4534df1b9700bdac8888e720bb0acda1d Mon Sep 17 00:00:00 2001 From: crobibero Date: Tue, 1 Sep 2020 08:12:36 -0600 Subject: readd nullable number converters --- MediaBrowser.Common/Json/JsonDefaults.cs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'MediaBrowser.Common/Json/JsonDefaults.cs') diff --git a/MediaBrowser.Common/Json/JsonDefaults.cs b/MediaBrowser.Common/Json/JsonDefaults.cs index 9d30927db..3f74c896f 100644 --- a/MediaBrowser.Common/Json/JsonDefaults.cs +++ b/MediaBrowser.Common/Json/JsonDefaults.cs @@ -31,6 +31,8 @@ namespace MediaBrowser.Common.Json options.Converters.Add(new JsonGuidConverter()); options.Converters.Add(new JsonStringEnumConverter()); + options.Converters.Add(new JsonNullableInt32Converter()); + options.Converters.Add(new JsonNullableInt64Converter()); return options; } -- cgit v1.2.3 From eb400f72928c9a87362c7d763be4627a7f9cd5cb Mon Sep 17 00:00:00 2001 From: crobibero Date: Tue, 1 Sep 2020 09:19:22 -0600 Subject: Fallback to base jsonconverter --- .../Json/Converters/JsonNullableInt32Converter.cs | 31 +++++++------- .../Json/Converters/JsonNullableInt64Converter.cs | 48 +++++++++------------- MediaBrowser.Common/Json/JsonDefaults.cs | 8 +++- 3 files changed, 41 insertions(+), 46 deletions(-) (limited to 'MediaBrowser.Common/Json/JsonDefaults.cs') diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs b/MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs index cd0017c78..a4ecc542e 100644 --- a/MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs +++ b/MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs @@ -10,31 +10,32 @@ namespace MediaBrowser.Common.Json.Converters /// public class JsonNullableInt32Converter : JsonConverter { + private readonly JsonConverter _baseJsonConverter; + + /// + /// Initializes a new instance of the class. + /// + /// The base json converter. + public JsonNullableInt32Converter(JsonConverter baseJsonConverter) + { + _baseJsonConverter = baseJsonConverter; + } + /// public override int? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - switch (reader.TokenType) + if (reader.TokenType == JsonTokenType.String && ((reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty)) { - case JsonTokenType.String when (reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty: - case JsonTokenType.Null: - return null; - default: - // fallback to default handling - return reader.GetInt32(); + return null; } + + return _baseJsonConverter.Read(ref reader, typeToConvert, options); } /// public override void Write(Utf8JsonWriter writer, int? value, JsonSerializerOptions options) { - if (value is null) - { - writer.WriteNullValue(); - } - else - { - writer.WriteNumberValue(value.Value); - } + _baseJsonConverter.Write(writer, value, options); } } } diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs b/MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs index 8c6879ac7..1745a0b09 100644 --- a/MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs +++ b/MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs @@ -1,52 +1,42 @@ using System; +using System.ComponentModel; using System.Text.Json; using System.Text.Json.Serialization; namespace MediaBrowser.Common.Json.Converters { /// - /// Parse JSON string as nullable long. - /// Javascript does not support 64-bit integers. + /// Converts a nullable int64 object or value to/from JSON. /// Required - some clients send an empty string. /// public class JsonNullableInt64Converter : JsonConverter { + private readonly JsonConverter _baseJsonConverter; + /// - /// Read JSON string as int64. + /// Initializes a new instance of the class. /// - /// . - /// Type. - /// Options. - /// Parsed value. - public override long? Read(ref Utf8JsonReader reader, Type type, JsonSerializerOptions options) + /// The base json converter. + public JsonNullableInt64Converter(JsonConverter baseJsonConverter) + { + _baseJsonConverter = baseJsonConverter; + } + + /// + public override long? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { - switch (reader.TokenType) + if (reader.TokenType == JsonTokenType.String && ((reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty)) { - case JsonTokenType.String when (reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty: - case JsonTokenType.Null: - return null; - default: - // fallback to default handling - return reader.GetInt64(); + return null; } + + return _baseJsonConverter.Read(ref reader, typeToConvert, options); } - /// - /// Write long to JSON long. - /// - /// . - /// Value to write. - /// Options. + /// public override void Write(Utf8JsonWriter writer, long? value, JsonSerializerOptions options) { - if (value is null) - { - writer.WriteNullValue(); - } - else - { - writer.WriteNumberValue(value.Value); - } + _baseJsonConverter.Write(writer, value, options); } } } diff --git a/MediaBrowser.Common/Json/JsonDefaults.cs b/MediaBrowser.Common/Json/JsonDefaults.cs index 3f74c896f..bbdd1029a 100644 --- a/MediaBrowser.Common/Json/JsonDefaults.cs +++ b/MediaBrowser.Common/Json/JsonDefaults.cs @@ -29,10 +29,14 @@ namespace MediaBrowser.Common.Json NumberHandling = JsonNumberHandling.AllowReadingFromString }; + // Get built-in converters for fallback converting. + var baseNullableInt32Converter = (JsonConverter)options.GetConverter(typeof(int?)); + var baseNullableInt64Converter = (JsonConverter)options.GetConverter(typeof(long?)); + options.Converters.Add(new JsonGuidConverter()); options.Converters.Add(new JsonStringEnumConverter()); - options.Converters.Add(new JsonNullableInt32Converter()); - options.Converters.Add(new JsonNullableInt64Converter()); + options.Converters.Add(new JsonNullableInt32Converter(baseNullableInt32Converter)); + options.Converters.Add(new JsonNullableInt64Converter(baseNullableInt64Converter)); return options; } -- cgit v1.2.3 From 9ddf550b43b3dcaa1129e369242bd664632bff03 Mon Sep 17 00:00:00 2001 From: crobibero Date: Tue, 1 Sep 2020 09:42:59 -0600 Subject: Simplify json converters --- .../Json/Converters/JsonNullableInt32Converter.cs | 41 -------------------- .../Json/Converters/JsonNullableInt64Converter.cs | 41 -------------------- .../Json/Converters/JsonNullableStructConverter.cs | 44 ++++++++++++++++++++++ MediaBrowser.Common/Json/JsonDefaults.cs | 4 +- 4 files changed, 46 insertions(+), 84 deletions(-) delete mode 100644 MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs delete mode 100644 MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs create mode 100644 MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs (limited to 'MediaBrowser.Common/Json/JsonDefaults.cs') diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs b/MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs deleted file mode 100644 index a4ecc542e..000000000 --- a/MediaBrowser.Common/Json/Converters/JsonNullableInt32Converter.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace MediaBrowser.Common.Json.Converters -{ - /// - /// Converts a nullable int32 object or value to/from JSON. - /// Required - some clients send an empty string. - /// - public class JsonNullableInt32Converter : JsonConverter - { - private readonly JsonConverter _baseJsonConverter; - - /// - /// Initializes a new instance of the class. - /// - /// The base json converter. - public JsonNullableInt32Converter(JsonConverter baseJsonConverter) - { - _baseJsonConverter = baseJsonConverter; - } - - /// - public override int? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType == JsonTokenType.String && ((reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty)) - { - return null; - } - - return _baseJsonConverter.Read(ref reader, typeToConvert, options); - } - - /// - public override void Write(Utf8JsonWriter writer, int? value, JsonSerializerOptions options) - { - _baseJsonConverter.Write(writer, value, options); - } - } -} diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs b/MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs deleted file mode 100644 index 38e1f8e2f..000000000 --- a/MediaBrowser.Common/Json/Converters/JsonNullableInt64Converter.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; - -namespace MediaBrowser.Common.Json.Converters -{ - /// - /// Converts a nullable int64 object or value to/from JSON. - /// Required - some clients send an empty string. - /// - public class JsonNullableInt64Converter : JsonConverter - { - private readonly JsonConverter _baseJsonConverter; - - /// - /// Initializes a new instance of the class. - /// - /// The base json converter. - public JsonNullableInt64Converter(JsonConverter baseJsonConverter) - { - _baseJsonConverter = baseJsonConverter; - } - - /// - public override long? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType == JsonTokenType.String && ((reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty)) - { - return null; - } - - return _baseJsonConverter.Read(ref reader, typeToConvert, options); - } - - /// - public override void Write(Utf8JsonWriter writer, long? value, JsonSerializerOptions options) - { - _baseJsonConverter.Write(writer, value, options); - } - } -} diff --git a/MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs b/MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs new file mode 100644 index 000000000..cffc41ba3 --- /dev/null +++ b/MediaBrowser.Common/Json/Converters/JsonNullableStructConverter.cs @@ -0,0 +1,44 @@ +using System; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace MediaBrowser.Common.Json.Converters +{ + /// + /// Converts a nullable struct or value to/from JSON. + /// Required - some clients send an empty string. + /// + /// The struct type. + public class JsonNullableStructConverter : JsonConverter + where T : struct + { + private readonly JsonConverter _baseJsonConverter; + + /// + /// Initializes a new instance of the class. + /// + /// The base json converter. + public JsonNullableStructConverter(JsonConverter baseJsonConverter) + { + _baseJsonConverter = baseJsonConverter; + } + + /// + public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + // Handle empty string. + if (reader.TokenType == JsonTokenType.String && ((reader.HasValueSequence && reader.ValueSequence.IsEmpty) || reader.ValueSpan.IsEmpty)) + { + return null; + } + + return _baseJsonConverter.Read(ref reader, typeToConvert, options); + } + + /// + public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options) + { + _baseJsonConverter.Write(writer, value, options); + } + } +} diff --git a/MediaBrowser.Common/Json/JsonDefaults.cs b/MediaBrowser.Common/Json/JsonDefaults.cs index bbdd1029a..5867cd4a0 100644 --- a/MediaBrowser.Common/Json/JsonDefaults.cs +++ b/MediaBrowser.Common/Json/JsonDefaults.cs @@ -35,8 +35,8 @@ namespace MediaBrowser.Common.Json options.Converters.Add(new JsonGuidConverter()); options.Converters.Add(new JsonStringEnumConverter()); - options.Converters.Add(new JsonNullableInt32Converter(baseNullableInt32Converter)); - options.Converters.Add(new JsonNullableInt64Converter(baseNullableInt64Converter)); + options.Converters.Add(new JsonNullableStructConverter(baseNullableInt32Converter)); + options.Converters.Add(new JsonNullableStructConverter(baseNullableInt64Converter)); return options; } -- cgit v1.2.3