【问题标题】:deserialize in Node js binary data created in C#在 C# 中创建的 Node js 二进制数据中反序列化
【发布时间】: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


【解决方案1】:

您正在向 Node js 发送字节数组(从 c# 对象创建)。你可能想发送一些更有用的东西,最好是一个字符串。要从 c# 对象创建(序列化)字符串(json 对象),请使用序列化器/转换器。在较新版本的 .net 中,您已在 var jsonString = System.Text.Json.JsonSerializer.Serialize(object) 中构建,或者您可以使用 Newtonsoft.Json nuget 包来实现相同的目的。 Newtonsoft.Json 变种var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(object);

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 2016-09-15
    • 1970-01-01
    • 2016-09-29
    • 2023-03-10
    • 2020-03-07
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多