Пример #1
0
        object TryToParse(Type type, byte[] data)
        {
            try
            {
                var stream = new MemoryStream(data);
                var obj    = ProtoBuf.Meta.RuntimeTypeModel.Default.Deserialize(stream, null, type);
                if (stream.Position != stream.Length)
                {
                    throw new Exception("Not enough data readed.");
                }
                return(obj);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Try to decode this data: " + ex.Message);
            }

            byte code = data[data.Length - 1];

            for (int i = 0; i < data.Length - 1; i++)
            {
                data[i] ^= code;
            }
            data = Zlib.DeCompress(data);
            return(ProtoBuf.Meta.RuntimeTypeModel.Default.Deserialize(new MemoryStream(data), null, type));
        }