From caccfa37453e4372becbbcb8b53e66e81d6462a5 Mon Sep 17 00:00:00 2001 From: Jkorf Date: Mon, 29 Mar 2021 15:46:00 +0200 Subject: [PATCH] Added better handling of errors deserializing streams --- CryptoExchange.Net/BaseClient.cs | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/CryptoExchange.Net/BaseClient.cs b/CryptoExchange.Net/BaseClient.cs index e358b89..e4c60de 100644 --- a/CryptoExchange.Net/BaseClient.cs +++ b/CryptoExchange.Net/BaseClient.cs @@ -241,27 +241,42 @@ namespace CryptoExchange.Net } catch (JsonReaderException jre) { - if(stream.CanSeek) + string data; + if (stream.CanSeek) + { stream.Seek(0, SeekOrigin.Begin); - var data = await ReadStream(stream).ConfigureAwait(false); + data = await ReadStream(stream).ConfigureAwait(false); + } + else + data = "[Data only available in Debug LogVerbosity]"; log.Write(LogVerbosity.Error, $"{(requestId != null ? $"[{requestId}] " : "")}Deserialize JsonReaderException: {jre.Message}, Path: {jre.Path}, LineNumber: {jre.LineNumber}, LinePosition: {jre.LinePosition}, data: {data}"); return new CallResult(default, new DeserializeError($"Deserialize JsonReaderException: {jre.Message}, Path: {jre.Path}, LineNumber: {jre.LineNumber}, LinePosition: {jre.LinePosition}", data)); } catch (JsonSerializationException jse) { + string data; if (stream.CanSeek) + { stream.Seek(0, SeekOrigin.Begin); - var data = await ReadStream(stream).ConfigureAwait(false); + data = await ReadStream(stream).ConfigureAwait(false); + } + else + data = "[Data only available in Debug LogVerbosity]"; + log.Write(LogVerbosity.Error, $"{(requestId != null ? $"[{requestId}] " : "")}Deserialize JsonSerializationException: {jse.Message}, data: {data}"); return new CallResult(default, new DeserializeError($"Deserialize JsonSerializationException: {jse.Message}", data)); } catch (Exception ex) { - if (stream.CanSeek) + string data; + if (stream.CanSeek) { stream.Seek(0, SeekOrigin.Begin); + data = await ReadStream(stream).ConfigureAwait(false); + } + else + data = "[Data only available in Debug LogVerbosity]"; var exceptionInfo = GetExceptionInfo(ex); - var data = await ReadStream(stream).ConfigureAwait(false); log.Write(LogVerbosity.Error, $"{(requestId != null ? $"[{requestId}] " : "")}Deserialize Unknown Exception: {exceptionInfo}, data: {data}"); return new CallResult(default, new DeserializeError($"Deserialize Unknown Exception: {exceptionInfo}", data)); }