2015-02-20 12 views
9

Dưới đây là kịch bản của tôi:Lỗi khi deserializing nhắn Azure Queue ServiceBus gửi từ Node.js (xanh sdk)

tôi gửi một thông báo Azure Queue ServiceBus từ Node.js bằng cách sử dụng nút sdk xanh như sau:

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

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

tôi có aC# người lao động vai trò đó được nghe Queue:

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

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

Khi phương pháp GetBody được thực hiện, tôi nhận được lỗi sau:

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

Trả lời

12

Sau khi một số đào bới xung quanh, tôi thấy THIS Điều đó đã giúp tôi có được một giải pháp:


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


Nếu ai đã phải đối mặt với vấn đề này và tìm thấy một giải pháp tốt hơn, xin vui lòng cho tôi biết!

Cảm ơn!

0

Cảm ơn bạn đã cập nhật, tôi đã làm ngược lại và điều này đã giúp tôi. Tôi nghĩ tôi sẽ thêm vào giải pháp của bạn để hoàn thành. Phương thức DeserializeObject cần định nghĩa lớp "MyMessage". Trong bài ban đầu của bạn, JSON của bạn là:

{ foo: 'Bar' } 

Nếu chúng ta thả vào đó json2csharp (json2csharp.com) bây giờ chúng tôi có lớp cần thiết để hoàn thành giải pháp của bạn:

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

Tất nhiên, sự phụ thuộc đang có gói Newtonsoft.Json được thêm vào giải pháp Visual Studio của bạn:

Install-Package Newtonsoft.Json -Pre 
Các vấn đề liên quan