2015-02-20 23 views
9

Oto mój scenariusz:błąd podczas deserializacji wiadomość Azure ServiceBus Kolejka (wysłanego z node.js Azure SDK)

Jestem wysyłanie wiadomości Azure ServiceBus Kolejka z node.js pomocą węzła lazurowe SDK tak:

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

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

mam aC# pracownik rolę, jaką jest słuchanie kolejki:

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

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

Gdy metoda GetBody zostanie wykonany, pojawia się następujący błąd:

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

Odpowiedz

12

Po niektóre kopania wokół, znalazłem THIS artykuł, który pomógł mi dostać rozwiązanie:


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


Jeśli ktoś w obliczu tego problemu i znaleźć lepsze rozwiązanie, proszę daj mi znać!

Dzięki!

0

Dzięki za aktualizację, robiłem odwrotność i to pomogło mi. Pomyślałem, że dodam do twojego rozwiązania kompletność. Metoda DeserializeObject wymaga zdefiniowania klasy "MyMessage". W swoim pierwotnym stanowisku, Twój JSON jest:

{ foo: 'Bar' } 

Jeśli spadać to pod json2csharp (json2csharp.com) mamy klasa wymagane do ukończenia rozwiązanie:

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

oczywiście zależność ma pakiet Newtonsoft.Json dodany do twojego rozwiązania Visual Studio:

Install-Package Newtonsoft.Json -Pre 
Powiązane problemy