在 Java 中反序列化由 C# 生成的 RabbitMQ 消息
Deserialize RabbitMQ message generated by C# in Java
我有一个 C# 中的 RabbitMQ 数据服务和 "fout" 一些消息。 subscripber/client 在 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.
}
反序列化 Java 中使用 .NET 内置的二进制序列化程序序列化的对象是不可能的(您必须自己实现反序列化程序)。
最简单的选择是使用基于文本的序列化选项,例如 JSON 和 XML。在 C# 和 Java.
中有很多关于如何执行此操作的教程
如果您需要使用二进制格式,可以考虑使用 Google 的协议缓冲区或 apache thrift。
我有一个 C# 中的 RabbitMQ 数据服务和 "fout" 一些消息。 subscripber/client 在 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.
}
反序列化 Java 中使用 .NET 内置的二进制序列化程序序列化的对象是不可能的(您必须自己实现反序列化程序)。
最简单的选择是使用基于文本的序列化选项,例如 JSON 和 XML。在 C# 和 Java.
中有很多关于如何执行此操作的教程如果您需要使用二进制格式,可以考虑使用 Google 的协议缓冲区或 apache thrift。