2015-02-20 3 views
9
SDk

Вот мой сценарий:Ошибка при десериализации Azure Queue ServiceBus сообщение, отправленное из Node.js (лазурь)

Я отправляю сообщение Azure Queue ServiceBus от Node.js с помощью узла лазурного SDK как так:

var message = { 
    body: JSON.stringify({ foo: 'Bar' }) 
}; 

serviceBusService.sendQueueMessage('myQueue', message, function (error) { 
    if (!error) { 
     console.log('msessage sent'); 
    } 
}); 

у меня есть C# работник роль, которую слушает в очереди:

QueueClient Client = QueueClient.CreateFromConnectionString(connStr, QueueName); 

Client.OnMessage((receivedMessage) => 
{ 
    var body = receivedMessage.GetBody<string>(); 
}); 

Когда метод GetBody запускается на выполнение, я получаю следующее сообщение об ошибке:

There was an error deserializing the object of type System.String. The input source is not correctly formatted

ответ

12

После некоторых рыть вокруг, я нашел THIS статьи, которая помогла мне получить решение:


Client.OnMessage((receivedMessage) => 
{ 
    var bodyJson = new StreamReader(receivedMessage.GetBody<Stream>(), Encoding.UTF8).ReadToEnd(); 
    var myMessage = JsonConvert.DeserializeObject<MyMessage>(bodyJson); 
}); 


Если кто-то сталкивались с этой проблемой и нашли лучшее решение, пожалуйста, дай мне знать!

Спасибо!

0

Спасибо за обновление, я делал обратное, и это помогло мне. Я думал, что добавлю к вашему решению полноту. Метод DeserializeObject нуждается в определении класса «MyMessage». В исходном сообщении, ваш JSON является:

{ foo: 'Bar' } 

Если мы опускаем, что в json2csharp (json2csharp.com) мы теперь имеем класс требуется, чтобы завершить решение:

public class MyMessage 
{ 
    public string foo { get; set; } 
} 

Конечно, зависимость имеет Newtonsoft.Json пакет, добавленный к вашему решению Visual Studio:

Install-Package Newtonsoft.Json -Pre