我有一个 .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/