diff --git a/CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs b/CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs
index f99de56..6e17fee 100644
--- a/CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs
+++ b/CryptoExchange.Net/Converters/SystemTextJson/CommaSplitEnumConverter.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Text.Json;
@@ -10,7 +11,12 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
///
/// Converter for comma separated enum values
///
- public class CommaSplitEnumConverter : JsonConverter where T: struct, Enum
+#if NET5_0_OR_GREATER
+ public class CommaSplitEnumConverter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields)] T> : JsonConverter where T : struct, Enum
+#else
+ public class CommaSplitEnumConverter : JsonConverter where T : struct, Enum
+#endif
+
{
///
public override T[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
diff --git a/CryptoExchange.Net/Converters/SystemTextJson/EnumConverter.cs b/CryptoExchange.Net/Converters/SystemTextJson/EnumConverter.cs
index bad0d4d..0971d4b 100644
--- a/CryptoExchange.Net/Converters/SystemTextJson/EnumConverter.cs
+++ b/CryptoExchange.Net/Converters/SystemTextJson/EnumConverter.cs
@@ -21,7 +21,11 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
///
/// String value
///
+#if NET5_0_OR_GREATER
+ public static T? ParseString<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields)] T>(string value) where T : struct, Enum
+#else
public static T? ParseString(string value) where T : struct, Enum
+#endif
=> EnumConverter.ParseString(value);
///
@@ -61,27 +65,8 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
: JsonConverter, INullableConverterFactory where T : struct, Enum
{
private static List>? _mapping = null;
- private bool _warnOnMissingEntry = true;
- private bool _writeAsInt;
private NullableEnumConverter? _nullableEnumConverter = null;
- /////
- ///// ctor
- /////
- //public EnumConverter() : this(false, true)
- //{ }
-
- /////
- ///// ctor
- /////
- /////
- /////
- //public EnumConverter(bool writeAsInt, bool warnOnMissingEntry)
- //{
- // _warnOnMissingEntry = warnOnMissingEntry;
- // _writeAsInt = writeAsInt;
- //}
-
internal class NullableEnumConverter : JsonConverter
{
private readonly EnumConverter _enumConverter;
@@ -160,8 +145,7 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
else
{
// We received an enum value but weren't able to parse it.
- if (_warnOnMissingEntry)
- Trace.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss:fff} | Warning | Cannot map enum value. EnumType: {enumType.Name}, Value: {stringValue}, Known values: {string.Join(", ", _mapping.Select(m => m.Value))}. If you think {stringValue} should added please open an issue on the Github repo");
+ Trace.WriteLine($"{DateTime.Now:yyyy/MM/dd HH:mm:ss:fff} | Warning | Cannot map enum value. EnumType: {enumType.Name}, Value: {stringValue}, Known values: {string.Join(", ", _mapping.Select(m => m.Value))}. If you think {stringValue} should added please open an issue on the Github repo");
}
return null;
@@ -173,15 +157,8 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
///
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
{
- if (!_writeAsInt)
- {
- var stringValue = GetString(value);
- writer.WriteStringValue(stringValue);
- }
- else
- {
- writer.WriteNumberValue((int)Convert.ChangeType(value, typeof(int)));
- }
+ var stringValue = GetString(value);
+ writer.WriteStringValue(stringValue);
}
private static bool GetValue(Type objectType, string value, out T? result)
diff --git a/CryptoExchange.Net/Converters/SystemTextJson/ObjectStringConverter.cs b/CryptoExchange.Net/Converters/SystemTextJson/ObjectStringConverter.cs
index d35bd98..b9b73a8 100644
--- a/CryptoExchange.Net/Converters/SystemTextJson/ObjectStringConverter.cs
+++ b/CryptoExchange.Net/Converters/SystemTextJson/ObjectStringConverter.cs
@@ -19,7 +19,7 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
if (string.IsNullOrEmpty(value))
return default;
- return (T?)JsonDocument.Parse(value!).Deserialize(typeof(T));
+ return (T?)JsonDocument.Parse(value!).Deserialize(typeof(T), options);
}
///
diff --git a/CryptoExchange.Net/Converters/SystemTextJson/SystemTextJsonMessageAccessor.cs b/CryptoExchange.Net/Converters/SystemTextJson/SystemTextJsonMessageAccessor.cs
index b0d45a9..5d6576d 100644
--- a/CryptoExchange.Net/Converters/SystemTextJson/SystemTextJsonMessageAccessor.cs
+++ b/CryptoExchange.Net/Converters/SystemTextJson/SystemTextJsonMessageAccessor.cs
@@ -167,6 +167,10 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
}
///
+#if NET5_0_OR_GREATER
+ [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL2026:RequiresUnreferencedCode", Justification = "JsonSerializerOptions provided here has TypeInfoResolver set")]
+ [UnconditionalSuppressMessage("AssemblyLoadTrimming", "IL3050:RequiresUnreferencedCode", Justification = "JsonSerializerOptions provided here has TypeInfoResolver set")]
+#endif
public List? GetValues(MessagePath path)
{
if (!IsJson)
@@ -179,7 +183,7 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
if (value.Value.ValueKind != JsonValueKind.Array)
return default;
- return value.Value.Deserialize>()!;
+ return value.Value.Deserialize>(_customSerializerOptions)!;
}
private JsonElement? GetPathNode(MessagePath path)
diff --git a/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/EndpointOptions.cs b/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/EndpointOptions.cs
index 996b2ec..3bc4b4b 100644
--- a/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/EndpointOptions.cs
+++ b/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/EndpointOptions.cs
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
@@ -97,7 +98,11 @@ namespace CryptoExchange.Net.SharedApis
/// Options for an exchange endpoint
///
/// Type of data
+#if NET5_0_OR_GREATER
+ public class EndpointOptions<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] T> : EndpointOptions where T : SharedRequest
+#else
public class EndpointOptions : EndpointOptions where T : SharedRequest
+#endif
{
///
/// Required optional parameters in the request
diff --git a/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/PaginatedEndpointOptions.cs b/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/PaginatedEndpointOptions.cs
index 572a9ef..10e98bb 100644
--- a/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/PaginatedEndpointOptions.cs
+++ b/CryptoExchange.Net/SharedApis/Models/Options/Endpoints/PaginatedEndpointOptions.cs
@@ -1,4 +1,5 @@
using CryptoExchange.Net.Objects;
+using System.Diagnostics.CodeAnalysis;
using System.Text;
namespace CryptoExchange.Net.SharedApis
@@ -7,7 +8,11 @@ namespace CryptoExchange.Net.SharedApis
/// Options for paginated endpoints
///
///
+#if NET5_0_OR_GREATER
+ public class PaginatedEndpointOptions<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] T> : EndpointOptions where T : SharedRequest
+#else
public class PaginatedEndpointOptions : EndpointOptions where T : SharedRequest
+#endif
{
///
/// Type of pagination supported