反序列化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