通过websocket将字节数组从c#发送到angular

通过websocket将字节数组从c#发送到angular,c#,angular,binary,C#,Angular,Binary,嗨,我想实现一个功能,通过websocket将字节数组从C#发送到我的Angular 7。基本上,我有一个用C#运行的websocket,我的前端是用Angular7编写的 请注意,以下示例是一个简化的示例。在我的实际应用程序中,我要发送的对象包含大约400个字段。将对象序列化为json字符串后,大约为6kb。另外,我需要在大约一秒钟内发送30个这样的对象。发送二进制数据将显著减少包的大小并加快速度 在C#中,我有这样的示例代码来生成websocket的有效负载: public class Te

嗨,我想实现一个功能,通过websocket将字节数组从C#发送到我的Angular 7。基本上,我有一个用C#运行的websocket,我的前端是用Angular7编写的

请注意,以下示例是一个简化的示例。在我的实际应用程序中,我要发送的对象包含大约400个字段。将对象序列化为json字符串后,大约为6kb。另外,我需要在大约一秒钟内发送30个这样的对象。发送二进制数据将显著减少包的大小并加快速度

在C#中,我有这样的示例代码来生成websocket的有效负载:

public class Test
{
    public int Id { get; set; }
    public float Value { get; set; }
    public string Description { get; set; }
}

public class Payload
{
    public object Obj { get; set; }
}

Test[] tests = new Test[]
{
    new Test
    {
         Id = 0,
         Value = 1.12f,
         Description = "The First Test"
    }
};


    byte[] testsByteArray;
    using (MemoryStream m = new MemoryStream())
    {
        using (BinaryWriter binaryWriter = new BinaryWriter(m))
        {
            foreach (Test test in tests)
            {
                binaryWriter.Write(test.Id);
                binaryWriter.Write(test.Value);
                binaryWriter.Write(test.Description);
            }
        }
    testsByteArray = m.ToArray();
}

Payload payload = new Payload
{
    Obj = testsByteArray
};

string a = JsonConvert.SerializeObject(payload);
最终我得到了
a
作为
{“Obj”:“aaaaaa clcjz8ovghliezpcnn0ifrlc3q=“}
我猜
Obj
的值是
testsbyteraray
的base64编码值

现在,在我的前端,我可以接收json字符串。问题是如何将
aaaaaaa clcjz8ovghliezpcnn0ifrlc3q=
转换回与角度中的
Test
格式相同的对象

我尝试的是:

我尝试使用下面的函数
atob()
对base64进行解码,然后使用下面的函数将解码后的字符串转换为字节数组

str2ab(str): ArrayBuffer {
    var buf: ArrayBuffer = new ArrayBuffer(str.length * 2); // 2 bytes for each char
    var bufView = new Uint16Array(buf);
    for (var i = 0, strLen = str.length; i < strLen; i++) {
      bufView[i] = str.charCodeAt(i);
    }
    return buf;
}
我不确定如何转换为正确的值。有人能帮忙吗


谢谢

在不同的平台和语言之间发送二进制数据是脆弱的,很难做到正确。我建议在发送之前转换为平台无关的表示(比如JSON数组),然后在另一端转换回来

比如说,

string a = JsonConvert.SerializeObject(tests);

你能展示你已经实现的完整c#逻辑吗?你想做什么?你不能仅仅通过网络发送一个二进制blob,然后期望一种不同的编程语言能够处理它。我理解得对吗?您正在向Angular应用程序发送
JSON
。在Angular中,您想将其转换为
字节[]
?请参见输出上的b64解码,您只收到您发送的内容,它是b64编码的。问题是您正在写入二进制数据。。您需要自己处理才能获得正确的值。我认为你可以找到更好的方法来解决你的问题。为什么不简单地序列化测试呢?因此,您不需要手动提取书面值有效载荷=新有效载荷{Obj=测试};字符串a=JsonConvert.SerializeObject(有效负载)```谢谢@Rodney,我实际上需要每33毫秒发送一个6kb的对象。将对象序列化为字符串非常慢,因为它太大了。这就是为什么我想发送二进制数据。
string a = JsonConvert.SerializeObject(tests);