with azure brokeredmessage get the body without knowing the type

azure, azureservicebus, c#

Solution

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;
}

Problem

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>(); ```

Original source

Related problems