首页 > 解决方案 > Azure 服务总线消息反序列化在核心转换中中断

问题描述

因此,我创建了一个新的 Azure Functions 项目 v3,并正在移植 v1 中在 4.6.2 上运行的函数子集,同时将其余函数作为过时的函数弃用。不幸的是,由于从 Microsoft.ServiceBus.Messaging 更改为 Microsoft.Azure.ServiceBus,从 BrokeredMessage 更改为 Message 时,以下反序列化方法现在失败:

反序列化流类型的对象时出错。输入源的格式不正确。

问题就在错误中,但我不确定正确的新方法是什么,它有点不清楚。

连载

public static Message CreateBrokeredMessage(object messageObject)
{

       var message = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageObject)))
       {
           ContentType = "application/json",
           Label = messageObject.GetType().Name

       };

       return message;
}

反序列化

public static T ParseBrokeredMessage<T>(Message msg)
{
     var body = msg.GetBody<Stream>();
     var jsonContent = new StreamReader(body, true).ReadToEnd();
     T updateMessage = JsonConvert.DeserializeObject<T>(jsonContent);

     return updateMessage;
}

目的

                   var fileuploadmessage = new PlanFileUploadMessage()
                    {
                        PlanId = file.Plan_Id.Value,
                        UploadedAt = uploadTimeStamp,
                        UploadedBy = uploadUser,
                        FileHash = uploadedFileName,
                        FileName = file.Name,
                        BusinessUnitName = businessUnitName,
                        UploadedFileId = uploadedFile.Id
                    };
    ```

标签: serializationazure-storagemessageazureservicebusbrokeredmessage

解决方案


Message.GetBody<T>()是使用旧版服务总线 SDK(WindowsAzure.ServiceBus 包)发送的消息的扩展方法,其中BrokeredMessage填充了Stream. 如果您的发件人如您所展示的那样发送一个字节数组,您应该使用Message.Body属性访问它。

如果您的消息以BrokeredMessage.


推荐阅读