diff --git a/CryptoExchange.Net/Clients/RestApiClient.cs b/CryptoExchange.Net/Clients/RestApiClient.cs
index 1efa6380..032ab5fc 100644
--- a/CryptoExchange.Net/Clients/RestApiClient.cs
+++ b/CryptoExchange.Net/Clients/RestApiClient.cs
@@ -439,6 +439,10 @@ namespace CryptoExchange.Net.Clients
var outputOriginalData = ApiOptions.OutputOriginalData ?? ClientOptions.OutputOriginalData;
if (outputOriginalData || MessageHandler.RequiresSeekableStream || !response.IsSuccessStatusCode)
{
+ // Create a seekable stream from the response stream if:
+ // 1. We need to output the original data
+ // 2. The message handler requires a seekable stream
+ // 3. The response indicates error and we want to output (part of) the returned data
responseStream = await CopyStreamAsync(responseStream).ConfigureAwait(false);
using var reader = new StreamReader(responseStream, Encoding.UTF8, false, 4096, true);
if (outputOriginalData)
diff --git a/CryptoExchange.Net/Converters/SystemTextJson/MessageHandlers/JsonSocketMessageHandler.cs b/CryptoExchange.Net/Converters/SystemTextJson/MessageHandlers/JsonSocketMessageHandler.cs
index 80a7f77f..169d897a 100644
--- a/CryptoExchange.Net/Converters/SystemTextJson/MessageHandlers/JsonSocketMessageHandler.cs
+++ b/CryptoExchange.Net/Converters/SystemTextJson/MessageHandlers/JsonSocketMessageHandler.cs
@@ -165,6 +165,14 @@ namespace CryptoExchange.Net.Converters.SystemTextJson.MessageHandlers
return null;
}
+ ///
+ /// Return type identifier for non-json messages
+ ///
+ protected virtual string? GetTypeIdentifierNonJson(ReadOnlySpan data, WebSocketMessageType? webSocketMessageType)
+ {
+ return null;
+ }
+
///
public virtual string? GetTypeIdentifier(ReadOnlySpan data, WebSocketMessageType? webSocketMessageType)
{
@@ -173,6 +181,12 @@ namespace CryptoExchange.Net.Converters.SystemTextJson.MessageHandlers
int? arrayIndex = null;
_searchResult.Clear();
+ if (data[0] != 0x5B && data[0] != 0x7B)
+ {
+ // Message doesn't start with `{` or `[`, not valid for processing as json
+ return GetTypeIdentifierNonJson(data, webSocketMessageType);
+ }
+
var reader = new Utf8JsonReader(data);
while (reader.Read())
{