.net - 如何反序列化 NServiceBus XML 消息?

标签 .net xml serialization nservicebus

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

Bus.Send(MyMessageClass);

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

如果可能的话,我想使用 NServiceBus.Serializers.XML.XmlMessageSerializer() 对象(不是 .NET 框架的 XmlSerializer() 对象)来执行此操作?

最佳答案

过去,我必须对消息的序列化进行故障排除,因此进行了这个旧的单元测试。可能足以让您开始,但 IIRC 它必须在正在运行的总线的上下文中运行,否则消息类型将不会在序列化器中注册(我认为在总线引导时会发生这种情况)。

    [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);
        }
    }

可能值得研究一下 XML 序列化的 NSB 单元测试 here .

关于.net - 如何反序列化 NServiceBus XML 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489139/

相关文章:

c# - 如何将 SecureString 转换为 System.String?

c# - foreach 语句不能对变量进行操作 MVC3 错误

c# - 'base' 和 'this' 关键字之间的区别

xml - 在 xpath 中为什么我可以使用大于符号 > 但不能小于 <

iphone - 编辑 xml 文件时界面生成器 Storyboard编译器错误

.net - 在运行时转换类型化数组

python - 正则表达式,re.compile,返回None而不是匹配

java - 如何序列化 Scala 中的函数?

serialization - "Serialize"VHDL 记录

c# - 如何从 json 序列化 protobuf,并自动忽略 C# 中的未知字段?