反序列化Azure ServiceBus队列消息时从Node.js(azure sdk)发送错误

这是我的场景:

我使用节点azure sdk从Node.js发送Azure ServiceBus Queue消息,如下所示:

var message = { body: JSON.stringify({ foo: 'Bar' }) }; serviceBusService.sendQueueMessage('myQueue', message, function (error) { if (!error) { console.log('msessage sent'); } }); 

我有正在侦听队列的ac#workerangular色:

 QueueClient Client = QueueClient.CreateFromConnectionString(connStr, QueueName); Client.OnMessage((receivedMessage) => { var body = receivedMessage.GetBody<string>(); }); 

GetBody方法得到执行时,我得到以下错误:

反序列化System.Stringtypes的对象时出现错误。 input源格式不正确

经过一些挖掘,我发现这篇文章,帮助我得到一个解决scheme:

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

如果有人遇到这个问题,并find更好的解决scheme,请让我知道!

谢谢!

感谢更新,我做了相反的事情,这对我有帮助。 我想我会添加到您的解决scheme的完整性。 DeserializeObject方法需要定义“MyMessage”类。 在你原来的文章中,你的JSON是:

 { foo: 'Bar' } 

如果我们把它放到json2csharp(json2csharp.com)中,我们现在有了完成解决scheme所需的类:

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

当然,依赖项是将Newtonsoft.Json包添加到您的Visual Studio解决scheme中:

 Install-Package Newtonsoft.Json -Pre