【发布时间】:2012-05-16 21:45:23
【问题描述】:
在我的工作中,我使用部分使用 C++ 和 C# 开发的应用程序。 C++代码负责管理activeMQ(发送、接收消息)。
我开发了一个应用程序,通过订阅我的 C# 应用程序来监控主题中发送的消息。
因此,当向主题发送消息时,我的应用程序设法处理消息,但消息在 ActiveMQBytesMessage 中序列化。
如何反序列化这个对象?
public void OnMessage(IMessage message)
{
if (message != null)
{
var content = (message as ActiveMQBytesMessage).Content; // This is a byte[], I tried to deserialize using BinaryFormatter but it throws an exception, I can't write it here because I'm at home.
}
}
我刚刚注意到 ActiveMQBytesMessage 从命名空间 Apache.NMS 继承了 IBytesMessage,但我没有看到任何可以帮助我反序列化消息的内容。
我使用最新版本的 ActiveMQ 和 NMS
[NB] 我的 C# 应用程序的目标是简单地监控 ActiveMQ 通道内发生的事情。这就是为什么我需要反序列化 ActiveMQBytesMessage 以便我可以在网格视图中显示对象的名称及其内容。
[添加更多信息]
这是我试图反序列化的内容。
var memoryStream = new MemoryStream((message as ActiveMQBytesMessage).Content);
var binaryFormatter = new BinaryFormatter();
memoryStream.Position = 0;
var deserializedMessage = binaryFormatter.Deserialize(memoryStream);
反序列化时出现此错误:
输入流不是有效的二进制格式。起始内容(以字节为单位)为:00-00-00-00-00-00-4F-8C-00-00-00-09-00-00-00-00-54 ...
【问题讨论】:
-
您需要提供更多上下文。你在序列化什么以及从哪里序列化。自然地,从 C++ 发送的内容不会只是反序列化为 C# 对象,这就是您的问题听起来像是您正在尝试做的事情。对您的问题进行更详细的细分有助于您获得更好的答案。
-
嗨蒂姆,序列化的对象可以是任何东西。到目前为止,我所看到的是,大多数时候 C++(托管)发送一个 C# 对象,我可以在我的项目中引用该对象以进行反序列化。我还能提供什么来澄清上下文吗?请随时问我。
-
你试过
var deserializedMessage = binaryFormatter.Deserialize(new RemotingSurrogateSelector(), memoryStream);吗? -
您好 david.s,您的指令有误。反序列化方法不采用 RemoteSurrogateSelector() 类型的对象