When you are using the brokered message in the Azure Service Bus, you can retrieve the body of the message with the call .GetBody. The code is simple:
var msg = subscription.Receive(); MyPayload payload = msg.GetBody<MyPayload>();
However, is there a way to retrieve the Body without explicitly knowing the class of the body object?
var msg = subscription.Receive(); Type bodyType = Type.GetType( msg.ContentType); var payload = msg.GetBody<bodyType>();
If the intent is to only grab the message body regardless of the content you can get it as a stream.
Stream stream = message.GetBody<Stream>(); StreamReader reader = new StreamReader(stream); string s = reader.ReadToEnd();
Here is the complete code to deserialize from the brokeredmessage:
public T GetBody<T>(BrokeredMessage brokeredMessage) { var ct = brokeredMessage.ContentType; Type bodyType = Type.GetType(ct, true); var stream = brokeredMessage.GetBody<Stream>(); DataContractSerializer serializer = new DataContractSerializer(bodyType); XmlDictionaryReader reader = XmlDictionaryReader.CreateBinaryReader(stream, XmlDictionaryReaderQuotas.Max); object deserializedBody = serializer.ReadObject(reader); T msgBase = (T)deserializedBody; return msgBase; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With