From 90ad59c63aaefe96c43eedfecfde00e793ef32e9 Mon Sep 17 00:00:00 2001 From: Jkorf Date: Fri, 22 Nov 2024 16:20:09 +0100 Subject: [PATCH] Added comma split enum string json converter --- .../SystemTextJson/CommaSplitEnumConverter.cs | 27 +++++++++++++++++++ .../Comparers/SystemTextJsonComparer.cs | 3 +++ 2 files changed, 30 insertions(+) create mode 100644 CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs diff --git a/CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs b/CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs new file mode 100644 index 0000000..f74af7a --- /dev/null +++ b/CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace CryptoExchange.Net.Converters.SystemTextJson +{ + /// + /// Converter for comma seperated enum values + /// + public class CommaSplitEnumConverter : JsonConverter> where T : Enum + { + /// + public override IEnumerable? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return (reader.GetString()?.Split(',').Select(x => EnumConverter.ParseString(x)).ToArray() ?? new T[0])!; + } + + /// + public override void Write(Utf8JsonWriter writer, IEnumerable value, JsonSerializerOptions options) + { + writer.WriteStringValue(string.Join(",", value.Select(x => EnumConverter.GetString(x)))); + } + } +} diff --git a/CryptoExchange.Net/Testing/Comparers/SystemTextJsonComparer.cs b/CryptoExchange.Net/Testing/Comparers/SystemTextJsonComparer.cs index 12c603c..7c44f4e 100644 --- a/CryptoExchange.Net/Testing/Comparers/SystemTextJsonComparer.cs +++ b/CryptoExchange.Net/Testing/Comparers/SystemTextJsonComparer.cs @@ -224,6 +224,9 @@ namespace CryptoExchange.Net.Testing.Comparers else if (propertyValue.GetType().GetInterfaces().Contains(typeof(IEnumerable)) && propertyValue.GetType() != typeof(string)) { + if (propValue.Type != JTokenType.Array) + return; + var jObjs = (JArray)propValue; var list = (IEnumerable)propertyValue; var enumerator = list.GetEnumerator();