/// <summary>Funzione per la serializzazione di oggetti.</summary>
        /// <param name="objList">L'oggetto da serializzare.</param>
        /// <param name="serializzationType">Il tipo di serializzazione che si vuole ottenere.</param>
        /// <param name="compressionType">[Optional: default=nothing] Il tipo di compressione da impiegare.</param>
        /// <returns>string</returns>
        public static string SerializeObject(Object obj, SerializationType serializationType, CompressionType compressionType = CompressionType.NOTHING)
        {
            string data = "";

            // serializzo BINARY
            if (serializationType == SerializationType.BINARY)
            {
                MemoryStream memStream    = new MemoryStream();
                IFormatter   binFormatter = new BinaryFormatter();
                binFormatter.Serialize(memStream, obj);
                byte[] buffer = memStream.ToArray();
                data = Convert.ToBase64String(buffer);

                // serializzo XML
            }
            else if (serializationType == SerializationType.XML)
            {
                MemoryStream  memStream     = new MemoryStream();
                XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType());
                xmlSerializer.Serialize(memStream, obj);
                byte[] buffer = memStream.ToArray();
                data = Encoding.UTF8.GetString(buffer);

                // serializzo JSON
            }
            else if (serializationType == SerializationType.JSON)
            {
                data = JsonWriter.Serialize(obj);

                // eccezione: tipo serializzazione non specificato
            }
            else
            {
                throw new Exception("Tipo di serializzazione sconosciuto.");
            }

            // comprimo la serializzazione se richiesto
            data = Compressor.Compress(data, compressionType);

            return(data);
        }
        /// <summary>Funzione per la deserializzazione di oggetti.</summary>
        /// <param name="data">La stringa contenente l'oggetto serializzato.</param>
        /// <param name="serializzationType">Il tipo di serializzazione usato.</param>
        /// <param name="compressionType">[Optional: default=nothing] Il tipo di compressione usato.</param>
        /// <returns>dynamic</returns>
        public static dynamic UnserializeObject(string data, Type objType, SerializationType serializationType, CompressionType compressionType = CompressionType.NOTHING)
        {
            dynamic obj = null;

            // decomprimo la serializzazione se richiesto
            data = Compressor.Decompress(data, compressionType);

            // deserializzo da BINARY
            if (serializationType == SerializationType.BINARY)
            {
                IFormatter   binFormatter = new BinaryFormatter();
                byte[]       buffer       = Convert.FromBase64String(data);
                MemoryStream memStream    = new MemoryStream(buffer);
                obj = binFormatter.Deserialize(memStream);

                // deserializzo da XML
            }
            else if (serializationType == SerializationType.XML)
            {
                XmlSerializer xmlSerializer = new XmlSerializer(objType);
                byte[]        buffer        = System.Text.Encoding.UTF8.GetBytes(data);
                MemoryStream  memStream     = new MemoryStream(buffer);
                obj = xmlSerializer.Deserialize(memStream);

                // deserializzo da JSON
            }
            else if (serializationType == SerializationType.JSON)
            {
                obj = JsonReader.Deserialize(data, objType);

                // eccezione: tipo serializzazione non specificato
            }
            else
            {
                throw new Exception("Tipo di serializzazione sconosciuto.");
            }

            return(obj);
        }