public void Deserialize(Response msg) { if (this.DataBuffer == null || this.DataBuffer.Length == 0) { throw new InvalidOperationException("DataBuffer is not set or empty"); } if (this.DataBuffer.Length < this.BufferOffset + this.DataLength) { throw new InvalidOperationException("DataBuffer is too short for specified offset and data length"); } try { var guidBytes = new byte[16]; Buffer.BlockCopy(this.DataBuffer, this.BufferOffset, guidBytes, 0, 16); msg.Id = new Guid(guidBytes); msg.IsSuccess = this.DataBuffer[this.BufferOffset + 16] == 1; var dataLen = BitConverter.ToInt32(this.DataBuffer, this.BufferOffset + 17); if (dataLen > 0) { msg.Data = new byte[dataLen]; Buffer.BlockCopy(this.DataBuffer, this.BufferOffset + 21, msg.Data, 0, dataLen); } else { msg.Data = null; } } catch (Exception ex) { throw new SerializationException("Exception during deserializing Response", ex); } }
public void ResponseMessageConsistencyTest1() { var original = new Response() { Id = Guid.NewGuid(), IsSuccess = false, Data = new byte[] { 0xAA, 0xBB, 0xCC, 0xDD } }; // Serializing var serializer = new MessageSerializingVisitor(); original.Accept(serializer); var serializedData = serializer.Result; Assert.NotNull(serializedData); Assert.True(serializedData.Length > 0); // Deserializing var deserializer = new MessageDeserializingVisitor() { DataBuffer = serializedData, DataLength = serializedData.Length, BufferOffset = 0 }; var reconstructedMessage = new Response(); reconstructedMessage.Accept(deserializer); Assert.AreEqual(original.Id, reconstructedMessage.Id); Assert.AreEqual(original.IsSuccess, reconstructedMessage.IsSuccess); Assert.AreEqual(original.Data, reconstructedMessage.Data); }