如何反序列化NServiceBus XML消息?

时间:2014-10-21 14:25:32

标签: .net xml serialization nservicebus

我有一个.NET控制台应用程序正在执行向另一台机器上的总线发送消息。使用代码:

Bus.Send(MyMessageClass);

我现在希望能够获取XML并将消息反序列化回C#对象MyMessageClass。这是为了允许我对在消息上设置和发送的属性编写验收测试。我可以将消息放入System.Messaging.Message()对象,然后从此实例的BodyStream中获取XML文档,但我无法正确反序列化。

如果可能的话,我想使用NServiceBus.Serializers.XML.XmlMessageSerializer()对象(不是.NET框架的XmlSerializer()对象)吗?

1 个答案:

答案 0 :(得分:2)

我必须在过去的某个时刻对邮件的序列化进行故障排除,所以请进行旧的单元测试。可能足以让你入门,但IIRC必须在正在运行的总线环境中运行,否则消息类型不会在序列化程序中注册(我认为在总线引导时会发生这种情况)。 p>

    [Test]
    public void TestMyMessage()
    {
        var test = new MyMessage();

        var serializer = new XmlMessageSerializer(new MessageMapper());

        var messages = new object[] {test};

        using (var stream = new MemoryStream())
        {
            serializer.Serialize(messages, stream);
            stream.Position = 0;

            object[] msg = serializer.Deserialize(stream);

            Assert.NotNull(msg[0]);
            Assert.IsTrue(msg[0] is MyMessage);
        }
    }

在NSB单元测试中进行XML序列化here可能是值得的。