mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-07 16:06:15 +00:00
wip
This commit is contained in:
parent
a8907c7ea5
commit
f17d9032fb
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
@ -10,7 +11,12 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Converter for comma separated enum values
|
/// Converter for comma separated enum values
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
#if NET5_0_OR_GREATER
|
||||||
|
public class CommaSplitEnumConverter<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicFields)] T> : JsonConverter<T[]> where T : struct, Enum
|
||||||
|
#else
|
||||||
public class CommaSplitEnumConverter<T> : JsonConverter<T[]> where T : struct, Enum
|
public class CommaSplitEnumConverter<T> : JsonConverter<T[]> where T : struct, Enum
|
||||||
|
#endif
|
||||||
|
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override T[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
public override T[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||||
|
@ -21,7 +21,11 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="value">String value</param>
|
/// <param name="value">String value</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
#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<T>(string value) where T : struct, Enum
|
public static T? ParseString<T>(string value) where T : struct, Enum
|
||||||
|
#endif
|
||||||
=> EnumConverter<T>.ParseString(value);
|
=> EnumConverter<T>.ParseString(value);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -61,27 +65,8 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
: JsonConverter<T>, INullableConverterFactory where T : struct, Enum
|
: JsonConverter<T>, INullableConverterFactory where T : struct, Enum
|
||||||
{
|
{
|
||||||
private static List<KeyValuePair<T, string>>? _mapping = null;
|
private static List<KeyValuePair<T, string>>? _mapping = null;
|
||||||
private bool _warnOnMissingEntry = true;
|
|
||||||
private bool _writeAsInt;
|
|
||||||
private NullableEnumConverter? _nullableEnumConverter = null;
|
private NullableEnumConverter? _nullableEnumConverter = null;
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// ctor
|
|
||||||
///// </summary>
|
|
||||||
//public EnumConverter() : this(false, true)
|
|
||||||
//{ }
|
|
||||||
|
|
||||||
///// <summary>
|
|
||||||
///// ctor
|
|
||||||
///// </summary>
|
|
||||||
///// <param name="writeAsInt"></param>
|
|
||||||
///// <param name="warnOnMissingEntry"></param>
|
|
||||||
//public EnumConverter(bool writeAsInt, bool warnOnMissingEntry)
|
|
||||||
//{
|
|
||||||
// _warnOnMissingEntry = warnOnMissingEntry;
|
|
||||||
// _writeAsInt = writeAsInt;
|
|
||||||
//}
|
|
||||||
|
|
||||||
internal class NullableEnumConverter : JsonConverter<T?>
|
internal class NullableEnumConverter : JsonConverter<T?>
|
||||||
{
|
{
|
||||||
private readonly EnumConverter<T> _enumConverter;
|
private readonly EnumConverter<T> _enumConverter;
|
||||||
@ -160,7 +145,6 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// We received an enum value but weren't able to parse it.
|
// 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");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,17 +156,10 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
|
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
|
||||||
{
|
|
||||||
if (!_writeAsInt)
|
|
||||||
{
|
{
|
||||||
var stringValue = GetString(value);
|
var stringValue = GetString(value);
|
||||||
writer.WriteStringValue(stringValue);
|
writer.WriteStringValue(stringValue);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
writer.WriteNumberValue((int)Convert.ChangeType(value, typeof(int)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool GetValue(Type objectType, string value, out T? result)
|
private static bool GetValue(Type objectType, string value, out T? result)
|
||||||
{
|
{
|
||||||
|
@ -19,7 +19,7 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
if (string.IsNullOrEmpty(value))
|
if (string.IsNullOrEmpty(value))
|
||||||
return default;
|
return default;
|
||||||
|
|
||||||
return (T?)JsonDocument.Parse(value!).Deserialize(typeof(T));
|
return (T?)JsonDocument.Parse(value!).Deserialize(typeof(T), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
@ -167,6 +167,10 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
|
#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<T?>? GetValues<T>(MessagePath path)
|
public List<T?>? GetValues<T>(MessagePath path)
|
||||||
{
|
{
|
||||||
if (!IsJson)
|
if (!IsJson)
|
||||||
@ -179,7 +183,7 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
|
|||||||
if (value.Value.ValueKind != JsonValueKind.Array)
|
if (value.Value.ValueKind != JsonValueKind.Array)
|
||||||
return default;
|
return default;
|
||||||
|
|
||||||
return value.Value.Deserialize<List<T>>()!;
|
return value.Value.Deserialize<List<T>>(_customSerializerOptions)!;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JsonElement? GetPathNode(MessagePath path)
|
private JsonElement? GetPathNode(MessagePath path)
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
@ -97,7 +98,11 @@ namespace CryptoExchange.Net.SharedApis
|
|||||||
/// Options for an exchange endpoint
|
/// Options for an exchange endpoint
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T">Type of data</typeparam>
|
/// <typeparam name="T">Type of data</typeparam>
|
||||||
|
#if NET5_0_OR_GREATER
|
||||||
|
public class EndpointOptions<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] T> : EndpointOptions where T : SharedRequest
|
||||||
|
#else
|
||||||
public class EndpointOptions<T> : EndpointOptions where T : SharedRequest
|
public class EndpointOptions<T> : EndpointOptions where T : SharedRequest
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Required optional parameters in the request
|
/// Required optional parameters in the request
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using CryptoExchange.Net.Objects;
|
using CryptoExchange.Net.Objects;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace CryptoExchange.Net.SharedApis
|
namespace CryptoExchange.Net.SharedApis
|
||||||
@ -7,7 +8,11 @@ namespace CryptoExchange.Net.SharedApis
|
|||||||
/// Options for paginated endpoints
|
/// Options for paginated endpoints
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T"></typeparam>
|
/// <typeparam name="T"></typeparam>
|
||||||
|
#if NET5_0_OR_GREATER
|
||||||
|
public class PaginatedEndpointOptions<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties)] T> : EndpointOptions<T> where T : SharedRequest
|
||||||
|
#else
|
||||||
public class PaginatedEndpointOptions<T> : EndpointOptions<T> where T : SharedRequest
|
public class PaginatedEndpointOptions<T> : EndpointOptions<T> where T : SharedRequest
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Type of pagination supported
|
/// Type of pagination supported
|
||||||
|
Loading…
x
Reference in New Issue
Block a user