public BinaryEnvelope Serialize(Envelope envelope)
        {
            var binaryEnvelope = new BinaryEnvelope();
            var memory         = new MemoryStream();

            _serializer.Model.SerializeWithLengthPrefix(memory, envelope.Header, typeof(EnvelopeHeader), PrefixStyle.Base128, 0);
            binaryEnvelope.Header = memory.ToArray();

            foreach (var item in envelope.Items)
            {
                var binaryMessageEnvelope = WriteMessageEnvelope(item);
                binaryEnvelope.AddBinaryMessageEnvelope(binaryMessageEnvelope);
            }

            return(binaryEnvelope);
        }
        public Envelope Deserialize(BinaryEnvelope binaryEnvelope)
        {
            var envelope = new Envelope();


            using (var memory = new MemoryStream(binaryEnvelope.Header))
            {
                envelope.Header = (EnvelopeHeader)_serializer.Model.DeserializeWithLengthPrefix(memory, null, typeof(EnvelopeHeader), PrefixStyle.Base128, 0, null);
            }

            foreach (var binaryMessageEnvelope in binaryEnvelope.MessageEnvelopes)
            {
                var item = ReadMessageEnvelope(binaryMessageEnvelope);
                envelope.AddItem(item);
            }

            return(envelope);
        }