【发布时间】:2021-03-08 04:58:03
【问题描述】:
我在 c# 中从 object 类型创建了一个字节数组,然后通过套接字协议将其发送到 Node js 应用程序,但无法将数据反序列化为可读对象。解码这些数据的方法是什么?
C#序列化代码:
private static byte[] ToBytes(object message)
{
IFormatter br = new BinaryFormatter();
byte[] keyAsBytes = null;
using (var ms = new MemoryStream())
{
br.Serialize(ms, message);
keyAsBytes = ms.ToArray();
}
return keyAsBytes;
}
object o = 801507;
byte[] AsBytes = ToBytes(o);
// send AsBytes
在节点 js 中我尝试解码数据
function handleMessage(message) {
console.log(message.toString());
}
上面的代码打印我{"type":"Buffer","data":[0,1,0,0,0,255,255,255,255,1,0,0,0,0,0,0,0,4,1,0,0,0,12,83,121,115,116,101,109,46,73,110,116,54,52,1,0,0,0,7,109,95,118,97,108,117,101,0,9,227,58,12,0,0,0,0,0,11]}
那么获取原点值的正确方法是什么?
【问题讨论】:
-
是什么让您认为您可以将 C# 对象二进制表示转换为在 Node.js 方面有用的东西?更好的选择可能是使用标准的东西,比如序列化和发送 JSON,它在几乎所有环境中都可以轻松解析,包括 Node.js。 (虽然 JSON 可能很冗长,但并不是每个项目都适用。)
-
"...但无法将数据反序列化为可读对象或 json。" JSON 是一种用于数据交换的文本表示法。您不会反序列化 to JSON,而是反序列化 from JSON(但前提是您首先要发送 JSON,而事实并非如此)。 [(更多在这里。)]
-
@T.J.Crowder 更多在哪里?链接丢失:)
-
@.J.Crowder 感谢您对我的文字的评论。帖子编辑
-
如上所述,JSON 显然是独立于平台的替代方案,但如果您需要二进制序列化,您可以查看protocol buffers。请参阅:Getting started with protobuf-net 和 Google Protocol Buffers: JavaScript Example。
标签: javascript c# node.js binary binaryformatter