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)); }