【问题标题】:Passing Complex object via web sockets通过 Web 套接字传递复杂对象
【发布时间】:2018-11-12 19:09:24
【问题描述】:

使用 .NetCore...

我有一个 C# 服务器端代码。

它创建一个对象列表,如:

[Serializable]
public class  MyObject
{
    public string test { get; set;}
}

var manyOfTheseObjects = new List<MyObject>();

manyOfTheseObjects   ~  add a few records

我现在转换为 ByteArray ~

var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, manyOfTheseObjects);
socket.Send(mStream.ToArray());

在 JavaScript 端,我正在监听网络套接字:

ws.onopen = function (data) {
try {
    console.log("onopen");
    console.log(JSON.parse(data).result);
    $("#divConnectionStatus").html("Client connected");
    resume= 1;}
catch (err) {
    console.log(err);
    $("#divConnectionStatus").html("onopen: " + err);
}

};

我得到错误:

SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
at WebSocket.Connect.ws.onopen (LiveFeed.js:182)

我显然做错了……

注意

改变了这个:

var binFormatter = new BinaryFormatter();
var mStream = new MemoryStream();
binFormatter.Serialize(mStream, manyOfTheseObjects);
socket.Send(mStream.ToArray());

到这里:

socket.Send( JsonConvert.SerializeObject(manyOfTheseObjects ) );

【问题讨论】:

  • 字节数组不一定是有效的 JSON。如果你想要 JSON,你可能应该使用 JsonConvert.SerializeObject()...
  • 只是把它改成了那个。同样的错误。将使用该代码更新我的问题
  • 在您的 onopen 处理程序中添加您在执行 console.log(data) 时获得的内容。
  • BinaryFormatter 是一个特定于 .NET 的二进制序列化程序(坦率地说:我会避免使用它)——它不是 JSON。如果需要:使用 JSON 序列化程序。
  • 与编辑;收到的有效载荷是什么?正如@HereticMonkey 所问:console.log(data) 是什么?

标签: javascript c# websocket


【解决方案1】:

现在您已经切换到 JSON 序列化程序:您需要 onmessage,而不是 onopen

ws.onmessage = function (evt) {
try {
    console.log("onmessage");
    console.log(JSON.parse(evt.data).result);
    $("#divConnectionStatus").html("Message received");
    resume= 1;}
catch (err) {
    console.log(err);
    $("#divConnectionStatus").html("onmessage: " + err);
}

【讨论】:

  • 感谢您的回答。我将使用 console.log(data) 更新我的 qquestion;很快
  • 当我最初请求从服务器发送回客户端的连接凭据时。我能接受那里的信息吗?
  • @AndrewSimpson 不,因为这不是消息引发的事件; onmessage
  • 我会重新检查。 :)
猜你喜欢
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多