gpt4 book ai didi

xml - 来自服务总线代理消息的未知 xml 序列化内容/命名空间

转载 作者:行者123 更新时间:2023-12-04 16:55:45 24 4
gpt4 key购买 nike

嗨,我想知道为什么当我从主题中获取消息时,我会在我的服务总线中的代理消息内容中获得一个特殊的命名空间。以及如何删除它?

我有我的 xml,当我(在我的 Azure 函数中)尝试从服务总线检索消息时,我得到了这个信息,或者更好地在我的根节点之前说:

@string3http://schemas.microsoft.com/2003/10/Serialization/��
<rootNode>...</rootNode>


当我从我的 azure 函数中的 servicebus 检索代理消息时,我这样做:
string BrokeredMessageBody = mySbMsg.GetBody<string>();

仅供引用:在 Azure 函数中,xml 看起来不错,但是当我的逻辑应用程序获取它时,它以某种方式添加了前面/上面指定的上述命名空间。

有没有人遇到过这个?

最佳答案

我的猜测是这就是您发送消息的方式:

string content = "My message";
var message = new BrokeredMessage(content);

但是,这不会按原样发送您的内容。您实际上正在使用此构造函数重载:

public BrokeredMessage(object serializableObject)

它确实:

Initializes a new instance of the BrokeredMessage class from a given object by using DataContractSerializer with a binary XmlDictionaryWriter.



因此,您的字符串被序列化为 XML,然后使用二进制格式进行格式化。这就是您在消息内容中看到的内容(命名空间和一些不可读的字符)。

您的 Azure 函数工作正常,因为 mySbMsg.GetBody<string>();反之 - 它从二进制 XML 反序列化消息。

要按原样序列化内容,您应该使用 Stream基于构造函数重载:

string content = "My message";
var message = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes(content)), true);

请注意,您自己定义了字符串编码(在我的示例中为 UTF-8)。

阅读也涉及更多:

using (var stream = message.GetBody<Stream>())
using (var streamReader = new StreamReader(stream, Encoding.UTF8))
{
content = streamReader.ReadToEnd();
}

关于xml - 来自服务总线代理消息的未知 xml 序列化内容/命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44759627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com