diff --git a/CryptoExchange.Net/Converters/ArrayConverter.cs b/CryptoExchange.Net/Converters/ArrayConverter.cs index 8686713..3ab5c0a 100644 --- a/CryptoExchange.Net/Converters/ArrayConverter.cs +++ b/CryptoExchange.Net/Converters/ArrayConverter.cs @@ -109,13 +109,21 @@ namespace CryptoExchange.Net.Converters { if (token.Type == JTokenType.Null) value = null; + + if (token.Type == JTokenType.Float) + value = token.Value(); } - if ((property.PropertyType == typeof(decimal) + if (value is decimal) + { + property.SetValue(result, value); + } + else if ((property.PropertyType == typeof(decimal) || property.PropertyType == typeof(decimal?)) && (value != null && value.ToString().IndexOf("e", StringComparison.OrdinalIgnoreCase) >= 0)) { - if (decimal.TryParse(value.ToString(), NumberStyles.Float, CultureInfo.InvariantCulture, out var dec)) + var v = value.ToString(); + if (decimal.TryParse(v, NumberStyles.Float, CultureInfo.InvariantCulture, out var dec)) property.SetValue(result, dec); } else diff --git a/CryptoExchange.Net/Converters/EnumConverter.cs b/CryptoExchange.Net/Converters/EnumConverter.cs index 3838dd2..dff2251 100644 --- a/CryptoExchange.Net/Converters/EnumConverter.cs +++ b/CryptoExchange.Net/Converters/EnumConverter.cs @@ -117,22 +117,32 @@ namespace CryptoExchange.Net.Converters /// /// [return: NotNullIfNotNull("enumValue")] - public static string? GetString(T enumValue) + public static string? GetString(T enumValue) => GetString(typeof(T), enumValue); + + + [return: NotNullIfNotNull("enumValue")] + private static string? GetString(Type objectType, object? enumValue) { - var objectType = typeof(T); objectType = Nullable.GetUnderlyingType(objectType) ?? objectType; if (!_mapping.TryGetValue(objectType, out var mapping)) mapping = AddMapping(objectType); - return enumValue == null ? null : (mapping.FirstOrDefault(v => v.Key.Equals(enumValue)).Value ?? enumValue.ToString()); + return enumValue == null ? null : (mapping.FirstOrDefault(v => v.Key.Equals(enumValue)).Value ?? enumValue.ToString()); } /// public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) { - var stringValue = GetString(value); - writer.WriteValue(stringValue); + if (value == null) + { + writer.WriteNull(); + } + else + { + var stringValue = GetString(value.GetType(), value); + writer.WriteValue(stringValue); + } } } }