c# - 如何阻止我的 System.Messaging.MessageQueue 将我的字符串包装在 XML 中?

标签 c# .net xml-serialization msmq

我需要通过 Windows 消息队列从我的 C# 应用程序与遗留应用程序通信。

遗留应用程序需要特定私有(private)队列中的纯字符串消息,但我似乎无法阻止 System.Messaging.MessageQueue 将我的消息包装在 XML 中!

我正在测试的代码非常简单:

MessageQueue myQueue = new MessageQueue(@".\Private$\tolegacy");
Message msg = new Message("My Test String");
myQueue.Send(msg);

问题在于消息正在被 XML 序列化并在队列中显示为:

<?xml version="1.0"?><string>My Test String</string>

我无法修改遗留应用程序的行为,因此我需要阻止 System.Messaging.MessageQueue 将我的消息格式化为 XML。

有人能帮忙吗?

最佳答案

使用 ActiveXMessageFormatter会给你想要的结果。我们遇到了同样的问题,只是想将一个字符串传递给一个队列,并让监听器进程作为一个字符串在主体中读取。 ActiveXMessageFormatter 用于序列化/反序列化原始数据类型,并且不会像默认的 XmlMessageFormatter 那样在您的输入上放置 XML 包装器。

mq.Formatter = new ActiveXMessageFormatter();

Here也是描述 3 种不同格式化程序的另一个链接。

关于c# - 如何阻止我的 System.Messaging.MessageQueue 将我的字符串包装在 XML 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937372/

相关文章:

C# Lambda 构建器模式

c# - 使用 C# 删除分隔符

c# - 全局化架构

c# - 每种语言的 sitecore 中最受欢迎的项目。

c# - .NET 和 mySQL 的用户安全

c# - 将 PictureBox 中的图像转换为位图

c# - 命名数组中的每个元素

.net - 在 .NET 中设计松散耦合的组件 - 提供者模式

c# - ObservableCollection 的 Windows 8 C# 序列化。出现错误 : System. InvalidOperationException

C# 在序列化/反序列化 XML 时更改列表中项目的元素名称