/// <summary>
        /// Takes output generated by SerializeParameters(), deserializes it and assigns the values
        /// to the Parameters
        /// </summary>
        /// <param name="parameters">An array of parameters to set with the new values</param>
        /// <param name="data">Serialized values, as generated by the SerializeParameters() method</param>
        public static void DeserializeParameters(Parameter[] parameters, byte[] data)
        {
            parameters = parameters.OrderBy(x => x.Index).ToArray();

            string values = Encoding.UTF8.GetString(data);
            var items = values.Split(',');
            var filtered = items.Where(x => x != null && x.Trim() != "").ToList();
            var select = filtered.Select(x => Convert.ToDouble(x.Trim(), System.Globalization.CultureInfo.InvariantCulture)).ToList();

            if (select.Count != parameters.Length)
                throw new Exception("Illegal program data. Number of parameters does not match");

            for (int i = 0; i < parameters.Length; i++)
                parameters[i].Value = select[i];
        }
        /// <summary>
        /// Accepts an array of Parameters and returns their values in a serialized format.
        /// </summary>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public static byte[] SerializeParameters(Parameter[] parameters)
        {
            parameters = parameters.OrderBy(x => x.Index).ToArray();

            string output = "";
            foreach (var p in parameters)
                output += p.Value.ToString(System.Globalization.CultureInfo.InvariantCulture) + ", ";

            return Encoding.UTF8.GetBytes(output);
        }