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()) {