我有一个CloudQueueMessage
,我想插入“Hello World” - 所以我写道:
CloudQueueMessage message = new CloudQueueMessage("Hello World");
它很完美。
我的问题是我想用一个对象代替“Hello World”:
CloudQueueMessage message = new CloudQueueMessage(new MyObject(parameter1, parameter2, ...));
但编译器不会让我,因为它告诉我:
The constructor CloudQueueMessage (MyObject) is undefined.
我如何实现我的目标?
答案 0 :(得分:1)
您可以查看this question。
它概述了使用C#获得“强类型队列”的技术。然而,这种方法非常简单,我相信你可以在Java中实现类似的行为。只要您可以将对象序列化为二进制数组。
如果需要,This is a question可能会对您有所帮助。并this also。
答案 1 :(得分:0)
CloudQueueMessage
可以使用二进制数据或字符串构造,而不是要序列化的对象(尽管您可以自己将其序列化为字符串,然后将其存储为消息)。这就是你收到错误的原因:没有构造函数将MyObject
作为参数。
有关创建CloudQueueMessage的更多详细信息,请参阅this msdn page。
答案 2 :(得分:0)
以下是我用于在处理Azure队列时将对象序列化为字符串并返回的代码。只需确保您的对象很小,以便它们符合64k要求
protected CloudQueueMessage CreateCloudQueueMessage(TQueueableEntity message)
{
using (var stringWriter = new StringWriter())
{
var xmlSerializer = new XmlSerializer(typeof(TQueueableEntity));
xmlSerializer.Serialize(stringWriter, message);
return new CloudQueueMessage(stringWriter.ToString());
}
}
protected TQueueableEntity CreateObjectFromMessage(CloudQueueMessage message)
{
var xmlSerializer = new XmlSerializer(typeof(TQueueableEntity));
//Deserialize message
using (var reader = new StringReader(message.AsString))
{
var result = (TQueueableEntity)xmlSerializer.Deserialize(reader);
reader.Close();
return result;
}
}