Azure 服务总线消息反序列化在核心转换中中断
Azure service bus Message deserialize broken in core conversion
因此,我创建了一个新的 Azure Functions 项目 v3,并从 v1 移植了 4.6.2 上 运行 的一部分功能,同时将其余功能作为过时的功能停用。不幸的是,由于从 Microsoft.ServiceBus.Messaging 更改为 Microsoft.Azure.ServiceBus,从 BrokeredMessage 更改为 Message 时,以下反序列化方法现在失败:
There was an error deserializing the object of type stream. The input source is not correctly formatted.
问题出在错误中,但我不确定正确的新方法是什么,有点不清楚。
序列化
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
};
```
Message.GetBody<T>()
是使用旧服务总线 SDK(WindowsAzure.ServiceBus 包)发送消息的扩展方法,其中 BrokeredMessage
填充了 Stream
以外的任何内容。如果您的发件人发送了一个字节数组,如您所示,您应该使用 Message.Body
属性.
访问它
如果您的消息作为 BrokeredMessage
发送,接收代码将需要 select 根据某些信息的任一方法来指示消息最初是如何发送的。
因此,我创建了一个新的 Azure Functions 项目 v3,并从 v1 移植了 4.6.2 上 运行 的一部分功能,同时将其余功能作为过时的功能停用。不幸的是,由于从 Microsoft.ServiceBus.Messaging 更改为 Microsoft.Azure.ServiceBus,从 BrokeredMessage 更改为 Message 时,以下反序列化方法现在失败:
There was an error deserializing the object of type stream. The input source is not correctly formatted.
问题出在错误中,但我不确定正确的新方法是什么,有点不清楚。
序列化
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
};
```
Message.GetBody<T>()
是使用旧服务总线 SDK(WindowsAzure.ServiceBus 包)发送消息的扩展方法,其中 BrokeredMessage
填充了 Stream
以外的任何内容。如果您的发件人发送了一个字节数组,如您所示,您应该使用 Message.Body
属性.
如果您的消息作为 BrokeredMessage
发送,接收代码将需要 select 根据某些信息的任一方法来指示消息最初是如何发送的。