mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-09 08:56:13 +00:00
Seperated validate json call, error parsing now receive JToken
This commit is contained in:
parent
b4d45b4194
commit
8a4e8403d2
@ -97,10 +97,9 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
|
|||||||
public ParseErrorTestRestClient() { }
|
public ParseErrorTestRestClient() { }
|
||||||
public ParseErrorTestRestClient(ClientOptions exchangeOptions) : base(exchangeOptions) { }
|
public ParseErrorTestRestClient(ClientOptions exchangeOptions) : base(exchangeOptions) { }
|
||||||
|
|
||||||
protected override Error ParseErrorResponse(string error)
|
protected override Error ParseErrorResponse(JToken error)
|
||||||
{
|
{
|
||||||
var data = JToken.Parse(error);
|
return new ServerError((int)error["errorCode"], (string)error["errorMessage"]);
|
||||||
return new ServerError((int)data["errorCode"], (string)data["errorMessage"]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,37 @@ namespace CryptoExchange.Net
|
|||||||
authProvider = authenticationProvider;
|
authProvider = authenticationProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tries to parse the json data and returns a token
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">The data to parse</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
protected CallResult<JToken> ValidateJson(string data)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return new CallResult<JToken>(JToken.Parse(data), null);
|
||||||
|
}
|
||||||
|
catch (JsonReaderException jre)
|
||||||
|
{
|
||||||
|
var info = $"Deserialize JsonReaderException: {jre.Message}, Path: {jre.Path}, LineNumber: {jre.LineNumber}, LinePosition: {jre.LinePosition}. Data: {data}";
|
||||||
|
log.Write(LogVerbosity.Error, info);
|
||||||
|
return new CallResult<JToken>(null, new DeserializeError(info));
|
||||||
|
}
|
||||||
|
catch (JsonSerializationException jse)
|
||||||
|
{
|
||||||
|
var info = $"Deserialize JsonSerializationException: {jse.Message}. Data: {data}";
|
||||||
|
log.Write(LogVerbosity.Error, info);
|
||||||
|
return new CallResult<JToken>(null, new DeserializeError(info));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
var info = $"Deserialize Unknown Exception: {ex.Message}. Data: {data}";
|
||||||
|
log.Write(LogVerbosity.Error, info);
|
||||||
|
return new CallResult<JToken>(null, new DeserializeError(info));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deserialize a string into an object
|
/// Deserialize a string into an object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -72,28 +103,10 @@ namespace CryptoExchange.Net
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected CallResult<T> Deserialize<T>(string data, bool checkObject = true, JsonSerializer serializer = null)
|
protected CallResult<T> Deserialize<T>(string data, bool checkObject = true, JsonSerializer serializer = null)
|
||||||
{
|
{
|
||||||
try
|
var tokenResult = ValidateJson(data);
|
||||||
{
|
if(!tokenResult.Success)
|
||||||
return Deserialize<T>(JToken.Parse(data), checkObject, serializer);
|
return new CallResult<T>(default(T), tokenResult.Error);
|
||||||
}
|
return Deserialize<T>(tokenResult.Data, checkObject, serializer);
|
||||||
catch (JsonReaderException jre)
|
|
||||||
{
|
|
||||||
var info = $"Deserialize JsonReaderException: {jre.Message}, Path: {jre.Path}, LineNumber: {jre.LineNumber}, LinePosition: {jre.LinePosition}. Data: {data}";
|
|
||||||
log.Write(LogVerbosity.Error, info);
|
|
||||||
return new CallResult<T>(default(T), new DeserializeError(info));
|
|
||||||
}
|
|
||||||
catch (JsonSerializationException jse)
|
|
||||||
{
|
|
||||||
var info = $"Deserialize JsonSerializationException: {jse.Message}. Data: {data}";
|
|
||||||
log.Write(LogVerbosity.Error, info);
|
|
||||||
return new CallResult<T>(default(T), new DeserializeError(info));
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
var info = $"Deserialize Unknown Exception: {ex.Message}. Data: {data}";
|
|
||||||
log.Write(LogVerbosity.Error, info);
|
|
||||||
return new CallResult<T>(default(T), new DeserializeError(info));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -13,8 +13,10 @@ using CryptoExchange.Net.Authentication;
|
|||||||
using CryptoExchange.Net.Interfaces;
|
using CryptoExchange.Net.Interfaces;
|
||||||
using CryptoExchange.Net.Logging;
|
using CryptoExchange.Net.Logging;
|
||||||
using CryptoExchange.Net.Objects;
|
using CryptoExchange.Net.Objects;
|
||||||
|
using CryptoExchange.Net.RateLimiter;
|
||||||
using CryptoExchange.Net.Requests;
|
using CryptoExchange.Net.Requests;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
|
||||||
namespace CryptoExchange.Net
|
namespace CryptoExchange.Net
|
||||||
{
|
{
|
||||||
@ -158,7 +160,27 @@ namespace CryptoExchange.Net
|
|||||||
|
|
||||||
log.Write(LogVerbosity.Debug, $"Sending {method}{(signed ? " signed" : "")} request to {request.Uri} {(paramString ?? "")}");
|
log.Write(LogVerbosity.Debug, $"Sending {method}{(signed ? " signed" : "")} request to {request.Uri} {(paramString ?? "")}");
|
||||||
var result = await ExecuteRequest(request).ConfigureAwait(false);
|
var result = await ExecuteRequest(request).ConfigureAwait(false);
|
||||||
return result.Error != null ? new CallResult<T>(null, result.Error) : Deserialize<T>(result.Data, checkResult);
|
if(!result.Success)
|
||||||
|
return new CallResult<T>(null, result.Error);
|
||||||
|
|
||||||
|
var jsonResult = ValidateJson(result.Data);
|
||||||
|
if(!jsonResult.Success)
|
||||||
|
return new CallResult<T>(null, jsonResult.Error);
|
||||||
|
|
||||||
|
if (IsErrorResponse(jsonResult.Data))
|
||||||
|
return new CallResult<T>(null, ParseErrorResponse(jsonResult.Data));
|
||||||
|
|
||||||
|
return Deserialize<T>(jsonResult.Data, checkResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Can be overridden to indicate if a response is an error response
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">The received data</param>
|
||||||
|
/// <returns>True if error response</returns>
|
||||||
|
protected virtual bool IsErrorResponse(JToken data)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -304,9 +326,9 @@ namespace CryptoExchange.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="error">The string the request returned</param>
|
/// <param name="error">The string the request returned</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected virtual Error ParseErrorResponse(string error)
|
protected virtual Error ParseErrorResponse(JToken error)
|
||||||
{
|
{
|
||||||
return new ServerError(error);
|
return new ServerError(error.ToString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user