public T Deserialize <T>(Stream stream)
        {
            var      reader   = new BinaryReader(stream, Encoding.UTF8);
            TypeInfo typeInfo = TypeInfoWriter.ReadInfo(reader);

            return((T)typeInfo.Deserializer.Invoke(reader));
        }
        public void Serialize(Stream stream, object value)
        {
            Type type = (value != null) ? value.GetType() : typeof(object);

            var writer = new BinaryWriter(stream, Encoding.UTF8);

            TypeInfo typeInfo = TypeInfoWriter.WriteInfo(writer, type);

            typeInfo.Serializer.Invoke(writer, value);
            writer.Flush();
        }