に行うように私に同じパックバイト配列を与えることmsgpack-cliを取得しようとすると、私は、オブジェクトをパックするmsgpackを使用することができます。それはJavaScriptではJavaScriptの
ペイロードは、以下のオブジェクトであるmsgpack.pack(payload);
:私は、このオブジェクトにmsgpack.pack(payload);
を呼び出すと
var payload = { event: "phx_join", payload: {}, ref: "1", topic: "players:1" };
、私は戻って(Uint8Array
など)は、次のバイトを取得:
[132, 165, 116, 111, 112, 105, 99, 169, 112, 108, 97, 121, 101, 114, 115, 58, 49, 165, 101, 118, 101, 110, 116, 168, 112, 104, 120, 95, 106, 111, 105, 110, 167, 112, 97, 121, 108, 111, 97, 100, 128, 163, 114, 101, 102, 161, 49]
をC#で使うと、C#のオブジェクトを上記と同じバイトシーケンスに変換できますか? C#で使用しているオブジェクト形式はそれほど重要ではありませんが、重要なのはバイトシーケンスが同じであることです。ここで私が試したものです:
public class Payload
{
public string @event;
public MessagePackObject payload;
public string @ref;
public string topic;
}
var payload = new Payload
{
@event = "phx_join",
payload = new MessagePackObject(),
@ref = "1",
topic = "players:1"
};
var packedBytes = SerializationContext.Default.GetSerializer<Payload>().PackSingleObject(payload);
次のように残念ながら、私は戻って、この場合の取得パックのバイトは、次のとおりです。
[148, 168, 112, 104, 120, 95, 106, 111, 105, 110, 192, 161, 49, 169, 112, 108, 97, 121, 101, 114, 115, 58, 49]
それは私は、JavaScriptから取得するパックされたデータと同じではありません。私は、メッセージパックがクロスプラットフォームであると考えられていたと思った。ここで何が起こっているのですが、デシリアライザでJavaScriptと同じバイト配列にパックするために、C#の同等のオブジェクトを作成するにはどうすればよいですか?