在C#中通过WebSocket正确发送JSON消息

92vpleto  于 2023-06-23  发布在  C#
关注(0)|答案(1)|浏览(297)

`我正在尝试使用C#通过WebSocket连接发送JSON消息。我试图发送的消息是一个序列化的对象,需要嵌套在JSON数组中。
我的消息的类结构是:

public class BulkSubscribeMessage
{
    [JsonProperty("_event")]
    public string Event { get; set; }
    [JsonProperty("tzID")]
    public int TimeZoneId { get; set; }
    public string Message { get; set; }
}

我已经序列化了一个BulkSubscribeMessage示例,并尝试将其嵌套在JSON数组中以通过WebSocket发送。我正在使用JsonConvert.SerializeObject来实现这一点。代码如下:

public async Task Subscribe(List<EconomicEvent> events)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("pid-eu-177:%%pid-eu-172:%%pid-eu-8826:%%pid-eu-1175153:%%pid-eu-169:%%pid-eu-8827:%%pid-eu-956731:%%");

    foreach (var eEvent in events)
    {
        sb.Append($"event-eu-{eEvent.Id}:%%");
    }

    // Removing the last two '%%'
    if (sb.Length > 2) sb.Length -= 2;

    BulkSubscribeMessage message = new BulkSubscribeMessage()
    {
        Event = "bulk-subscribe",
        TimeZoneId = 16,
        Message = sb.ToString()
    };

    // Create a list with one element: the serialized message
    var messageList = new List<string>
    {
        JsonConvert.SerializeObject(message)
    };

    // Serialize the list of messages
    string jsonString = JsonConvert.SerializeObject(messageList);

    var buffer = Encoding.UTF8.GetBytes(jsonString);
    await _client.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
}

当我发送此消息时,我没有从服务器获得响应。当我在Chrome开发者控制台中检查WebSocket流量时,预期的消息格式为:

[
    "{\"_event\":\"bulk-subscribe\",\"tzID\":16,\"message\":\"pid-eu-177:%%pid-eu-172:%%pid-eu-8826:%%pid-eu-1175153:%%pid-eu-169:%%pid-eu-8827:%%pid-eu-956731:%%event-eu-1:%%event-eu-2:...\"}"
]

然而,当我在代码中打印出jsonString时,格式看起来是正确的,但我没有从服务器获得任何响应。
如何通过WebSocket连接正确发送此JSON消息?我的序列化或WebSocket消息发送过程是否存在任何问题?我正在使用System.NET.WebSockets.ClientWebSocket进行WebSocket连接。
WebSocket URL:wss:streaming.forexpros.com/echo/321/dgwckgeo/websocket

我尝试在数组中序列化我的命令,旨在获得与Web浏览器客户端发送的正确命令相同的格式,但没有成功。我还是没能找到引号。

qnakjoqk

qnakjoqk1#

您正在序列化两次。试图取代

var messageList = new List<string>
    {
        JsonConvert.SerializeObject(message)
    };

    // Serialize the list of messages
    string jsonString = JsonConvert.SerializeObject(messageList);

string jsonString = JsonConvert.SerializeObject( 
                                    new BulkSubscribeMessage[] { message });
// or more simple
 string jsonString = "[" + JsonConvert.SerializeObject(message) + "]";

相关问题