1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-07 16:06:15 +00:00

Some small improvements and fixes

This commit is contained in:
JKorf 2024-03-22 16:41:19 +01:00
parent de72fe4fb9
commit 8ddd9ecf22
4 changed files with 76 additions and 22 deletions

View File

@ -92,9 +92,10 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
{ {
JsonTokenType.String => reader.GetString(), JsonTokenType.String => reader.GetString(),
JsonTokenType.Number => reader.GetInt16().ToString(), JsonTokenType.Number => reader.GetInt16().ToString(),
JsonTokenType.True => "true", JsonTokenType.True => reader.GetBoolean().ToString(),
JsonTokenType.False => "false", JsonTokenType.False => reader.GetBoolean().ToString(),
_ => null JsonTokenType.Null => null,
_ => throw new Exception("Invalid token type for enum deserialization: " + reader.TokenType)
}; };
if (string.IsNullOrEmpty(stringValue)) if (string.IsNullOrEmpty(stringValue))

View File

@ -10,6 +10,11 @@ using System.Text;
using System.Web; using System.Web;
using CryptoExchange.Net.Objects; using CryptoExchange.Net.Objects;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System.Globalization;
using System.Collections;
using System.Net.Http;
using System.Data.Common;
using Newtonsoft.Json.Linq;
namespace CryptoExchange.Net namespace CryptoExchange.Net
{ {
@ -59,7 +64,7 @@ namespace CryptoExchange.Net
/// <param name="urlEncodeValues">Whether or not the values should be url encoded</param> /// <param name="urlEncodeValues">Whether or not the values should be url encoded</param>
/// <param name="serializationType">How to serialize array parameters</param> /// <param name="serializationType">How to serialize array parameters</param>
/// <returns></returns> /// <returns></returns>
public static string CreateParamString(this Dictionary<string, object> parameters, bool urlEncodeValues, ArrayParametersSerialization serializationType) public static string CreateParamString(this IDictionary<string, object> parameters, bool urlEncodeValues, ArrayParametersSerialization serializationType)
{ {
var uriString = string.Empty; var uriString = string.Empty;
var arraysParameters = parameters.Where(p => p.Value.GetType().IsArray).ToList(); var arraysParameters = parameters.Where(p => p.Value.GetType().IsArray).ToList();
@ -67,17 +72,22 @@ namespace CryptoExchange.Net
{ {
if (serializationType == ArrayParametersSerialization.Array) if (serializationType == ArrayParametersSerialization.Array)
{ {
uriString += $"{string.Join("&", ((object[])(urlEncodeValues ? Uri.EscapeDataString(arrayEntry.Value.ToString()) : arrayEntry.Value)).Select(v => $"{arrayEntry.Key}[]={v}"))}&"; uriString += $"{string.Join("&", ((object[])(urlEncodeValues ? Uri.EscapeDataString(arrayEntry.Value.ToString()) : arrayEntry.Value)).Select(v => $"{arrayEntry.Key}[]={string.Format(CultureInfo.InvariantCulture, "{0}", v)}"))}&";
}
else if (serializationType == ArrayParametersSerialization.MultipleValues)
{
var array = (Array)arrayEntry.Value;
uriString += string.Join("&", array.OfType<object>().Select(a => $"{arrayEntry.Key}={Uri.EscapeDataString(string.Format(CultureInfo.InvariantCulture, "{0}", a))}"));
uriString += "&";
} }
else else
{ {
var array = (Array)arrayEntry.Value; var array = (Array)arrayEntry.Value;
uriString += string.Join("&", array.OfType<object>().Select(a => $"{arrayEntry.Key}={Uri.EscapeDataString(a.ToString())}")); uriString += $"{arrayEntry.Key}=[{string.Join(",", array.OfType<object>().Select(a => string.Format(CultureInfo.InvariantCulture, "{0}", a)))}]&";
uriString += "&";
} }
} }
uriString += $"{string.Join("&", parameters.Where(p => !p.Value.GetType().IsArray).Select(s => $"{s.Key}={(urlEncodeValues ? Uri.EscapeDataString(s.Value.ToString()) : s.Value)}"))}"; uriString += $"{string.Join("&", parameters.Where(p => !p.Value.GetType().IsArray).Select(s => $"{s.Key}={(urlEncodeValues ? Uri.EscapeDataString(string.Format(CultureInfo.InvariantCulture, "{0}", s.Value)) : string.Format(CultureInfo.InvariantCulture, "{0}", s.Value))}"))}";
uriString = uriString.TrimEnd('&'); uriString = uriString.TrimEnd('&');
return uriString; return uriString;
} }
@ -87,7 +97,7 @@ namespace CryptoExchange.Net
/// </summary> /// </summary>
/// <param name="parameters"></param> /// <param name="parameters"></param>
/// <returns></returns> /// <returns></returns>
public static string ToFormData(this SortedDictionary<string, object> parameters) public static string ToFormData(this IDictionary<string, object> parameters)
{ {
var formData = HttpUtility.ParseQueryString(string.Empty); var formData = HttpUtility.ParseQueryString(string.Empty);
foreach (var kvp in parameters) foreach (var kvp in parameters)
@ -96,16 +106,15 @@ namespace CryptoExchange.Net
{ {
var array = (Array)kvp.Value; var array = (Array)kvp.Value;
foreach (var value in array) foreach (var value in array)
formData.Add(kvp.Key, value.ToString()); formData.Add(kvp.Key, string.Format(CultureInfo.InvariantCulture, "{0}", value));
} }
else else
{ {
formData.Add(kvp.Key, kvp.Value.ToString()); formData.Add(kvp.Key, string.Format(CultureInfo.InvariantCulture, "{0}", kvp.Value));
} }
} }
return formData.ToString(); return formData.ToString();
} }
/// <summary> /// <summary>
/// Get the string the secure string is representing /// Get the string the secure string is representing
@ -349,10 +358,26 @@ namespace CryptoExchange.Net
var httpValueCollection = HttpUtility.ParseQueryString(string.Empty); var httpValueCollection = HttpUtility.ParseQueryString(string.Empty);
foreach (var parameter in parameters) foreach (var parameter in parameters)
{ {
if(parameter.Value.GetType().IsArray) if (parameter.Value.GetType().IsArray)
{ {
foreach (var item in (object[])parameter.Value) if (arraySerialization == ArrayParametersSerialization.JsonArray)
httpValueCollection.Add(arraySerialization == ArrayParametersSerialization.Array ? parameter.Key + "[]" : parameter.Key, item.ToString()); {
httpValueCollection.Add(parameter.Key, $"[{string.Join(",", (object[])parameter.Value)}]");
}
else
{
foreach (var item in (object[])parameter.Value)
{
if (arraySerialization == ArrayParametersSerialization.Array)
{
httpValueCollection.Add(parameter.Key + "[]", item.ToString());
}
else
{
httpValueCollection.Add(parameter.Key, item.ToString());
}
}
}
} }
else else
{ {
@ -382,8 +407,24 @@ namespace CryptoExchange.Net
{ {
if (parameter.Value.GetType().IsArray) if (parameter.Value.GetType().IsArray)
{ {
foreach (var item in (object[])parameter.Value) if (arraySerialization == ArrayParametersSerialization.JsonArray)
httpValueCollection.Add(arraySerialization == ArrayParametersSerialization.Array ? parameter.Key + "[]" : parameter.Key, item.ToString()); {
httpValueCollection.Add(parameter.Key, $"[{string.Join(",", (object[])parameter.Value)}]");
}
else
{
foreach (var item in (object[])parameter.Value)
{
if (arraySerialization == ArrayParametersSerialization.Array)
{
httpValueCollection.Add(parameter.Key + "[]", item.ToString());
}
else
{
httpValueCollection.Add(parameter.Key, item.ToString());
}
}
}
} }
else else
{ {

View File

@ -12,9 +12,14 @@ namespace CryptoExchange.Net.Interfaces
public interface ISymbolOrderBook public interface ISymbolOrderBook
{ {
/// <summary> /// <summary>
/// Identifier /// The exchange the book is for
/// </summary> /// </summary>
string Id { get; } string Exchange { get; }
/// <summary>
/// The Api the book is for
/// </summary>
string Api { get; }
/// <summary> /// <summary>
/// The status of the order book. Order book is up to date when the status is `Synced` /// The status of the order book. Order book is up to date when the status is `Synced`

View File

@ -99,15 +99,22 @@
/// Define how array parameters should be send /// Define how array parameters should be send
/// </summary> /// </summary>
public enum ArrayParametersSerialization public enum ArrayParametersSerialization
#pragma warning disable CS1570 // XML comment has badly formed XML
{ {
/// <summary> /// <summary>
/// Send multiple key=value for each entry /// Send as key=value1&key=value2
/// </summary> /// </summary>
MultipleValues, MultipleValues,
/// <summary> /// <summary>
/// Create an []=value array /// Send as key[]=value1&key[]=value2
/// </summary> /// </summary>
Array Array,
/// <summary>
/// Send as key=[value1, value2]
/// </summary>
JsonArray
#pragma warning restore CS1570 // XML comment has badly formed XML
} }
/// <summary> /// <summary>