Как я могу передать произвольный объект через 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;
    }
}
Другие вопросы по тегам