JSON в WebSocket в C#
Текстовый кадр WebSocket часто несёт JSON: после
ReceiveAsync байты переводят в строку
UTF-8 и передают в JsonDocument.Parse.
Бинарные кадры для JSON не используют.
Локально можно проверить разбор без сети - из
строки "{"event":"ready"}" поле
event даст "ready":
using System.Text.Json;
string frame = "{\"event\":\"ready\"}";
using JsonDocument doc = JsonDocument.Parse(frame);
Console.WriteLine(doc.RootElement.GetProperty("event").GetString());
Неверный JSON в кадре вызывает
JsonException на этапе
Parse. На echo-сервисе верный JSON
отправляют как текст, получают тот же кадр
и читают поле kind:
using System.Net.WebSockets;
using System.Text;
using System.Text.Json;
using ClientWebSocket client = new();
using CancellationTokenSource cts = new(TimeSpan.FromSeconds(8));
await client.ConnectAsync(new Uri("wss://echo.websocket.events"), cts.Token);
string json = "{\"kind\":\"ping\"}";
await client.SendAsync(Encoding.UTF8.GetBytes(json), WebSocketMessageType.Text, true, CancellationToken.None);
byte[] buf = new byte[256];
WebSocketReceiveResult part = await client.ReceiveAsync(buf, CancellationToken.None);
string back = Encoding.UTF8.GetString(buf, 0, part.Count);
using JsonDocument doc = JsonDocument.Parse(back);
Console.WriteLine(doc.RootElement.GetProperty("kind").GetString());
Отправьте на echo-сервис JSON с полем
"code" и числом 7, примите
ответ и выведите это число после разбора.