десериализовать сообщение, полученное из очереди сообщений

1

Я пытаюсь deseriliaze сообщение json, исходящее из MSMQ, но получаю исключение при разборе.

я делаю вот так:

var transaction = new MessageQueueTransaction();
                transaction.Begin();
                Console.WriteLine("Listening For Message Now...");
                var message = queue.Receive(transaction);
                var reader = new StreamReader(message.BodyStream,Encoding.Default);

                var jsonMessage = reader.ReadToEnd();
                var emailMessage = JsonConvert.DeserializeObject<MessageType>(jsonMessage);

 The Exception:
................
 Json Parser Exception Unexpected character encountered while parsing value: S. Path '', line 0, position 0

The Message Coming from MSMQ with control characters:
 .................................

Изображение 174551

я думаю, что это искушение является общим исходом, которое возникает при разборе.

Каков правильный способ получения сообщения из очереди?

Было бы неплохо получить некоторые осмысленные примеры :)

Теги:
serialization
wcf
json.net
msmq

1 ответ

1

Форматировщик должен быть установлен до и после. Вот что я имею в виду:

MessageQueue mq = new MessageQueue(@".\private$\<YourQueue>");

using (MessageQueueTransaction mqt = new MessageQueueTransaction())
        {
            mqt.Begin();
            message = new Message();                    
            message.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
            message.Body = JsonConvert.SerializeObject(<YourJsonObject>);
            mq.Send(message, mqt);
            mqt.Commit();
        }

Затем вы читаете сообщение следующим образом:

transaction = new MessageQueueTransaction();    

using (MessageQueue mq = new MessageQueue(<YourQueue>)
{
    transaction.Begin();
    mq.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
    Message m = mq.Receive(100, transaction);
    YourObjectType o = JsonConvert.DeserializeObject<YourObjectType>(m.Body.ToString());
}

transaction.Commit();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню