Мне кажется, вы отправляете свои сообщения так:
MyClass myObj = new MyClass { MyID = "121" };
string json = ... // serialize myObj to JSON
var message = new BrokeredMessage(json);
Однако это не отправляет ваш контент как есть. Вы фактически используете эту перегрузку конструктора:
public BrokeredMessage(object serializableObject)
и это делает:
Инициализирует новый экземпляр класса BrokeredMessage из заданного
объект с помощью DataContractSerializer с двоичным
XmlDictionaryWriter.
Итак, ваша строка сериализуется в XML, а затем форматируется с помощью двоичного форматирования. Это то, что вы видите в содержимом сообщения (пространство имен и некоторые нечитаемые символы).
message.GetBody<string>
отлично работает, потому что работает наоборот: десериализует сообщение из двоичного XML.
message.GetBody<Stream>
- необработанная операция, поэтому вы получаете необработанные байты.
Чтобы сериализовать контент как есть, вы должны использовать перегрузку конструктора на основе Stream
:
var message = new BrokeredMessage(new MemoryStream(Encoding.UTF8.GetBytes(json)), true);