From 3cc0dd7e12380a7e4a0ef86591890ece8421b14c Mon Sep 17 00:00:00 2001 From: crobibero Date: Mon, 16 Nov 2020 20:29:46 -0700 Subject: Reduce RequestHelpers.Split usage and remove RequestHelpers.GetGuids usage. --- .../Converters/JsonPipeDelimitedArrayConverter.cs | 74 ++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs (limited to 'MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs') diff --git a/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs b/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs new file mode 100644 index 0000000000..0eb6916a5a --- /dev/null +++ b/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs @@ -0,0 +1,74 @@ +using System; +using System.ComponentModel; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace MediaBrowser.Common.Json.Converters +{ + /// + /// Convert Pipe delimited string to array of type. + /// + /// Type to convert to. + public class JsonPipeDelimitedArrayConverter : JsonConverter + { + private readonly TypeConverter _typeConverter; + + /// + /// Initializes a new instance of the class. + /// + public JsonPipeDelimitedArrayConverter() + { + _typeConverter = TypeDescriptor.GetConverter(typeof(T)); + } + + /// + public override T[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.String) + { + var stringEntries = reader.GetString()?.Split('|', StringSplitOptions.RemoveEmptyEntries); + if (stringEntries == null || stringEntries.Length == 0) + { + return Array.Empty(); + } + + var parsedValues = new object[stringEntries.Length]; + var convertedCount = 0; + for (var i = 0; i < stringEntries.Length; i++) + { + try + { + parsedValues[i] = _typeConverter.ConvertFrom(stringEntries[i].Trim()); + convertedCount++; + } + catch (FormatException) + { + // TODO log when upgraded to .Net5 + // _logger.LogWarning(e, "Error converting value."); + } + } + + var typedValues = new T[convertedCount]; + var typedValueIndex = 0; + for (var i = 0; i < stringEntries.Length; i++) + { + if (parsedValues[i] != null) + { + typedValues.SetValue(parsedValues[i], typedValueIndex); + typedValueIndex++; + } + } + + return typedValues; + } + + return JsonSerializer.Deserialize(ref reader, options); + } + + /// + public override void Write(Utf8JsonWriter writer, T[] value, JsonSerializerOptions options) + { + JsonSerializer.Serialize(writer, value, options); + } + } +} -- cgit v1.2.3 From 5b62f70bc03afe0d1bce702d71635fe57562dd0c Mon Sep 17 00:00:00 2001 From: crobibero Date: Tue, 17 Nov 2020 09:57:08 -0700 Subject: Update exception handle comment --- .../Json/Converters/JsonCommaDelimitedArrayConverter.cs | 3 ++- MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs') diff --git a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs b/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs index 06a29a0dbe..a259cb7bcb 100644 --- a/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs +++ b/MediaBrowser.Common/Json/Converters/JsonCommaDelimitedArrayConverter.cs @@ -43,7 +43,8 @@ namespace MediaBrowser.Common.Json.Converters } catch (FormatException) { - // TODO log when upgraded to .Net5 + // TODO log when upgraded to .Net6 + // https://github.com/dotnet/runtime/issues/42975 // _logger.LogWarning(e, "Error converting value."); } } diff --git a/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs b/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs index 0eb6916a5a..75fbcea1f0 100644 --- a/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs +++ b/MediaBrowser.Common/Json/Converters/JsonPipeDelimitedArrayConverter.cs @@ -43,7 +43,8 @@ namespace MediaBrowser.Common.Json.Converters } catch (FormatException) { - // TODO log when upgraded to .Net5 + // TODO log when upgraded to .Net6 + // https://github.com/dotnet/runtime/issues/42975 // _logger.LogWarning(e, "Error converting value."); } } -- cgit v1.2.3