Как я могу передать произвольный объект через CloudQueueMessage? - PullRequest
1 голос
/ 27 марта 2012

У меня есть 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 ]

1 голос
/ 28 марта 2012

Вы можете проверить этот вопрос .

В нем описывается метод «строго типизированных очередей» с использованием C #. Однако этот подход действительно тривиален, и я уверен, что вы можете добиться аналогичного поведения в Java. Пока вы можете сериализовать ваш объект в двоичный массив.

Это вопрос , который может вам помочь, если вам нужно. И это тоже .

0 голосов
/ 28 марта 2012

Вот код, который я использую для сериализации объектов в строки и обратно при работе с очередями Azure.Просто убедитесь, что ваши объекты маленькие, чтобы они соответствовали требованию 64 КБ

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;
    }
}
0 голосов
/ 27 марта 2012

CloudQueueMessage может состоять из двоичных данных или строки, а не объекта, подлежащего сериализации (хотя вы можете сериализовать его в строку самостоятельно, а затем сохранить его как сообщение).Вот почему вы получаете сообщение об ошибке: нет конструктора, принимающего MyObject в качестве параметра.

Подробнее о создании CloudQueueMessage см. эту страницу MSDN .

...