私の仕事では、部分的にはC++とC#で開発されたアプリケーションで作業します。 C++コードは、activeMQ(sendメッセージ、receiveメッセージ)の管理を担当します。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が名前空間Apache.NMSからIBytesMessageを継承することに気づいたが、私は私がメッセージをデシリアライズすることができます何も表示されません。
私はNMS
とのActiveMQの最後のバージョン[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#オブジェクトにデシリアライズするだけではありません。これは、あなたの質問があなたがしようとしているように聞こえるようにするものです。あなたの問題の詳細な内訳は、より良い答えを得るのに役立ちます。 –
こんにちはTim、シリアル化されたオブジェクトは何でもかまいません。私がこれまで見たことは、C++(管理対象)がプロジェクトで参照することができるC#オブジェクトをデシリアライズすることがほとんどです。文脈を明確にするために私が提供できるものは他にありますか?私にお願いしてください。 – Gui
あなたは 'var deserializedMessage = binaryFormatter.Deserialize(新しいRemotingSurrogateSelector()、memoryStream);を試しましたか? –