Как я могу передать произвольный объект через CloudQueueMessage?
У меня есть 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.
Как я могу достичь того, чего хочу?
3 ответа
Вы можете проверить этот вопрос.
В нем описывается методика использования "строго типизированных очередей" с использованием C#. Однако этот подход действительно тривиален, и я уверен, что вы можете добиться аналогичного поведения в Java. Пока вы можете сериализовать ваш объект в двоичный массив.
Это вопрос, который может вам помочь, если вам нужно. И это тоже.
CloudQueueMessage
может быть сконструирован либо с двоичными данными, либо со строкой, а не с объектом для сериализации (хотя вы можете сериализовать его в строку самостоятельно, а затем сохранить в виде сообщения). Вот почему вы получаете ошибку: нет конструктора, который принимает MyObject
как его параметр.
Для получения дополнительной информации о создании CloudQueueMessage см. Эту страницу msdn.
Вот код, который я использую для сериализации объектов в строки и обратно при работе с очередями 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;
}
}