В моей работе я работаю с приложением, разработанным частично в C++ и C#. Код C++ отвечает за управление activeMQ (отправить, получить сообщение).ActiveMQ - десериализация сообщения ActiveMQBytesMessage
Я разработал приложение для мониторинга сообщений, отправленных в теме, подписавшись на мое приложение 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 наследует IBytesMessage из пространства имен Apache.NMS, но я не вижу ничего, что помогает мне десериализации сообщения.
Я использую последнюю версию ActiveMQ с NMS
[NB] Цель моего C# приложения просто контролировать то, что происходит внутри канала ActiveMQ. Вот почему мне нужно десериализовать ActiveMQBytesMessage, чтобы я мог отображать имя объекта и его содержимое в gridview.
[Добавлено больше информации]
Вот что я пытался десериализации.
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#, который я могу ссылаться в своем проекте на десериализацию. Есть ли что-то еще, что я могу предоставить, чтобы прояснить контекст?Не стесняйтесь спрашивать меня, пожалуйста. – Gui
Вы пробовали 'var deserializedMessage = binaryFormatter.Deserialize (новый RemotingSurrogateSelector(), memoryStream);'? –