调用Encoding.UTF8.GetString()

时间:2015-06-02 20:19:48

标签: c# json utf-8 rabbitmq nservicebus

我正在尝试从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()

返回的JSON示例
"{\"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 

0 个答案:

没有答案