public T Deserialize <T>(object serializedData) { using (EneterTrace.Entering()) { if (serializedData is byte[] == false) { throw new ArgumentException("Input parameter 'serializedData' is not byte[]."); } if (typeof(T) != typeof(MessageBusMessage)) { throw new InvalidOperationException("Data can be deserialized only into" + typeof(MessageBusMessage).Name); } MessageBusMessage aResult; byte[] aData = (byte[])serializedData; using (MemoryStream aStream = new MemoryStream(aData)) { BinaryReader aReader = new BinaryReader(aStream); // Read message bus request. int aRequest = aReader.ReadByte(); EMessageBusRequest aMessageBusRequest = (EMessageBusRequest)aRequest; // Read Id string anId = myEncoderDecoder.ReadPlainString(aReader, Encoding.UTF8, myIsLittleEndian); // Read message data. object aMessageData = null; if (aMessageBusRequest == EMessageBusRequest.SendRequestMessage || aMessageBusRequest == EMessageBusRequest.SendResponseMessage) { aMessageData = myEncoderDecoder.Read(aReader, myIsLittleEndian); } aResult = new MessageBusMessage(aMessageBusRequest, anId, aMessageData); return((T)(object)aResult); } } }
/// <summary> /// Constructs the message. /// </summary> /// <param name="request">Requested from the message bus.</param> /// <param name="id">Depending on the request it is client id or service id.</param> /// <param name="messageData">If the request is SendRequestMessage or SendResponseMessage it is the serialized message data. /// Otherwise it is null. /// </param> public MessageBusMessage(EMessageBusRequest request, string id, object messageData) { Request = request; Id = id; MessageData = messageData; }