1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-08 08:26:20 +00:00

Fixed array serialization support

This commit is contained in:
Jkorf 2022-03-04 10:37:22 +01:00
parent 42f95243d9
commit 434d9e3af6
2 changed files with 24 additions and 5 deletions

View File

@ -341,7 +341,7 @@ namespace CryptoExchange.Net
}
// Add the auth parameters to the uri, start with a new URI to be able to sort the parameters including the auth parameters
uri = uri.SetParameters(uriParameters);
uri = uri.SetParameters(uriParameters, arraySerialization);
var request = RequestFactory.Create(method, uri, requestId);
request.Accept = Constants.JsonContentHeader;

View File

@ -1,4 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
@ -419,8 +420,9 @@ namespace CryptoExchange.Net
/// </summary>
/// <param name="parameters"></param>
/// <param name="baseUri"></param>
/// <param name="arraySerialization"></param>
/// <returns></returns>
public static Uri SetParameters(this Uri baseUri, SortedDictionary<string, object> parameters)
public static Uri SetParameters(this Uri baseUri, SortedDictionary<string, object> parameters, ArrayParametersSerialization arraySerialization)
{
var uriBuilder = new UriBuilder();
uriBuilder.Scheme = baseUri.Scheme;
@ -428,7 +430,15 @@ namespace CryptoExchange.Net
uriBuilder.Path = baseUri.AbsolutePath;
var httpValueCollection = HttpUtility.ParseQueryString(string.Empty);
foreach (var parameter in parameters)
httpValueCollection.Add(parameter.Key, parameter.Value.ToString());
{
if(parameter.Value.GetType().IsArray)
{
foreach (var item in (object[])parameter.Value)
httpValueCollection.Add(arraySerialization == ArrayParametersSerialization.Array ? parameter.Key + "[]" : parameter.Key, item.ToString());
}
else
httpValueCollection.Add(parameter.Key, parameter.Value.ToString());
}
uriBuilder.Query = httpValueCollection.ToString();
return uriBuilder.Uri;
}
@ -438,8 +448,9 @@ namespace CryptoExchange.Net
/// </summary>
/// <param name="parameters"></param>
/// <param name="baseUri"></param>
/// <param name="arraySerialization"></param>
/// <returns></returns>
public static Uri SetParameters(this Uri baseUri, IOrderedEnumerable<KeyValuePair<string, object>> parameters)
public static Uri SetParameters(this Uri baseUri, IOrderedEnumerable<KeyValuePair<string, object>> parameters, ArrayParametersSerialization arraySerialization)
{
var uriBuilder = new UriBuilder();
uriBuilder.Scheme = baseUri.Scheme;
@ -447,7 +458,15 @@ namespace CryptoExchange.Net
uriBuilder.Path = baseUri.AbsolutePath;
var httpValueCollection = HttpUtility.ParseQueryString(string.Empty);
foreach (var parameter in parameters)
httpValueCollection.Add(parameter.Key, parameter.Value.ToString());
{
if (parameter.Value.GetType().IsArray)
{
foreach (var item in (object[])parameter.Value)
httpValueCollection.Add(arraySerialization == ArrayParametersSerialization.Array ? parameter.Key + "[]" : parameter.Key, item.ToString());
}
else
httpValueCollection.Add(parameter.Key, parameter.Value.ToString());
}
uriBuilder.Query = httpValueCollection.ToString();
return uriBuilder.Uri;
}