反序列化Java中C#生成的RabbitMQ消息

时间:2019-04-02 02:16:27

标签: java c# serialization memorystream binaryformatter

我在C#中有RabbitMQ数据服务,并“填充”了一些消息。订阅服务器/客户端使用Java。我可以收到消息,我知道如何在C#中反序列化,但是我不知道如何反序列化对象的消息。在Java中。

C#序列化:

byte[] message;
BinaryFormatter bf = new BinaryFormatter();
using (var ms = new MemoryStream())
{
    bf.Serialize(ms, updateMessage);
    message = ms.ToArray();
}

C#反序列化:

MyObject message = null;
using (var memStream = new MemoryStream())
{
    var binForm = new BinaryFormatter();
    memStream.Write(body, 0, body.Length);
    memStream.Seek(0, SeekOrigin.Begin);
    message = (MyObject)binForm.Deserialize(memStream);
}

Java接收器:

@RabbitListener(queues = queueName)
public void receive(??? message ) {
    // deserailize message right here
    // btw, I do not know what type of received message should be initialized.
}

1 个答案:

答案 0 :(得分:0)

要在没有很大难度的情况下对用.NET的内置二进制序列化程序序列化的Java对象进行反序列化是不可能的(您必须自己实现反序列化器)。

最简单的选择是使用基于文本的序列化选项,例如JSON和XML。有很多关于如何在C#和Java中执行此操作的教程。

如果您需要使用二进制格式,则可以查看一些选项,例如Google的协议缓冲区或apache节俭。