我正在尝试从audit
框架放置的NServiceBus
队列中取消消息。消息是Json Serialized,我使用RabbitMQ作为传输层。根据RabbitMQ网站上的教程,我正在做以下事情:
var factory = new ConnectionFactory { HostName = "localhost" };
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("audit", true, false, false, null);
if (myType.IsNormalized()) { }
var consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("audit", true, consumer);
while (true)
{
var eventArgs = (BasicDeliverEventArgs) consumer.Queue.Dequeue();
var body = eventArgs.Body;
var message = Encoding.UTF8.GetString(body);
var assemblyQualifiedName = String.Concat(eventArgs.BasicProperties.Type,
", Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
var objectType = Type.GetType(assemblyQualifiedName);
var deserializedMessage = JsonConvert.DeserializeObject(message, objectType);
}
}
}
这一直运行到最后一行,它会立即断开并告诉我JSON无效。当我调试并检查消息的内容时,JSON看起来很好,但Visual Studio JSON可视化器声称它不是。更奇怪的是,如果我从调试会话中复制确切的内容并硬编码,然后尝试反序列化它,它工作正常。如果我将内容复制到在线JSON验证器中,则确认JSON有效。
所以我的问题是Encoding.UTF8.GetString()
是否正在做一些可能危及message
的事情?它是否引入了可能不是JSON友好的字符,但可以通过复制/粘贴以某种方式修复。
引发的实际错误是:{"Unexpected character encountered while parsing value: . Path '', line 0, position 0."}
编辑:以下是Encoding.UTF8.GetString()
"{\"ProposalKey\":\"123-5\"}"
对应于:
239 187 191 123 34 80 114 111 112 111 115 97 108 75 101 121 34 58 34 49 50 51 45 53 34 125