From 81d856d78d61ec161ac83daf50bbed32739ce46d Mon Sep 17 00:00:00 2001 From: JKorf Date: Tue, 23 Jul 2024 12:00:08 +0200 Subject: [PATCH] Fixed System.Text.Json array converter deserialization when skipping indexes, added NumberStringConverter --- .../SystemTextJson/ArrayConverter.cs | 3 ++ .../SystemTextJson/NumberStringConverter.cs | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 CryptoExchange.Net/Converters/SystemTextJson/NumberStringConverter.cs diff --git a/CryptoExchange.Net/Converters/SystemTextJson/ArrayConverter.cs b/CryptoExchange.Net/Converters/SystemTextJson/ArrayConverter.cs index fb48322..1a58ad4 100644 --- a/CryptoExchange.Net/Converters/SystemTextJson/ArrayConverter.cs +++ b/CryptoExchange.Net/Converters/SystemTextJson/ArrayConverter.cs @@ -96,7 +96,10 @@ namespace CryptoExchange.Net.Converters.SystemTextJson var attribute = attributes.SingleOrDefault(a => a.ArrayProperty.Index == index); if (attribute == null) + { + index++; continue; + } var targetType = attribute.TargetType; object? value = null; diff --git a/CryptoExchange.Net/Converters/SystemTextJson/NumberStringConverter.cs b/CryptoExchange.Net/Converters/SystemTextJson/NumberStringConverter.cs new file mode 100644 index 0000000..a45014a --- /dev/null +++ b/CryptoExchange.Net/Converters/SystemTextJson/NumberStringConverter.cs @@ -0,0 +1,31 @@ +using System; +using System.Globalization; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace CryptoExchange.Net.Converters.SystemTextJson +{ + /// + /// Read string or number as string + /// + public class NumberStringConverter : JsonConverter + { + /// + public override string? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Null) + return null; + + if (reader.TokenType == JsonTokenType.Number) + return reader.GetInt64().ToString(); + + return reader.GetString(); + } + + /// + public override void Write(Utf8JsonWriter writer, string? value, JsonSerializerOptions options) + { + writer.WriteStringValue(value); + } + } +}