繁体   English   中英

使用 Windows.Azure.ServiceBus (5.2.0) 的 ServiceBus 消息处理程序无法使用 DataContractSerializer 反序列化正文 stream。

[英]ServiceBus message handler using Windows.Azure.ServiceBus (5.2.0) fails to deserialise body stream using DataContractSerializer NET 4.6.1

我正在使用 Windows.Azure.ServiceBus (5.2.0) 来接收和处理 Azure ServiceBus 消息。 作为其中的一部分,我需要将消息正文作为字符串访问以创建校验和。 代码如下:

if (messageBody.StartsWith("@"))
{
    DataContractSerializer serializer = new(typeof(string));
    using XmlDictionaryReader xmlDictionaryReader = 
    XmlDictionaryReader.CreateBinaryReader(brokeredMessage.GetBody<Stream>(), XmlDictionaryReaderQuotas.Max);
    messageBody = (string)serializer.ReadObject(xmlDictionaryReader);
}

If I create a StreamReader and read the text from the stream as UTF8 it comes out as @string3http://schemas.microsoft.com/2003/10/Serialization/��{"Prop1":null,"Prop2":null,"Prop3":null,"Prop4":null,"Prop5":null}

(string)serializer.ReadObject(xmlDictionaryReader)的错误是“期望命名空间'http://schemas.microsoft.com/2003/10/Serialization/'中的元素'字符串'..遇到名称为''的'None',命名空间''。”

我想要的是从有效负载中获取 JSON 作为字符串。 BrokeredMessage 是使用 JSON 字符串作为正文创建的,然后再发布到由上述代码订阅和处理的主题。

正如HarshithaVeeramalla-MT建议的那样,您能否尝试使用以下代码代替您的代码。

XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(message.Body.ToStream(), XmlDictionaryReaderQuotas.Max);

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM