/// <summary>
        /// Saves the Configuration object to file.
        /// </summary>
        /// <param name="config">A Configuration object.</param>
        public static void Save(Configuration config)
        {
            config.configs = SortByOnlineConfig(config.configs);

            FileStream   configFileStream   = null;
            StreamWriter configStreamWriter = null;

            try
            {
                configFileStream   = File.Open(CONFIG_FILE, FileMode.Create);
                configStreamWriter = new StreamWriter(configFileStream);
                var jsonString = JsonConvert.SerializeObject(config, Formatting.Indented);
                configStreamWriter.Write(jsonString);
                configStreamWriter.Flush();
                // NLog
                config.nLogConfig.SetLogLevel(config.isVerboseLogging ? verboseLogLevel : NLogConfig.LogLevel.Info);
                NLogConfig.SaveXML(config.nLogConfig);
            }
            catch (Exception e)
            {
                logger.LogUsefulException(e);
            }
            finally
            {
                if (configStreamWriter != null)
                {
                    configStreamWriter.Dispose();
                }
                if (configFileStream != null)
                {
                    configFileStream.Dispose();
                }
            }
        }
 public static void Save(Configuration config)
 {
     config.configs = SortByOnlineConfig(config.configs);
     if (config.index >= config.configs.Count)
     {
         config.index = config.configs.Count - 1;
     }
     if (config.index < -1)
     {
         config.index = -1;
     }
     if (config.index == -1 && string.IsNullOrEmpty(config.strategy))
     {
         config.index = 0;
     }
     config.isDefault = false;
     try
     {
         using (StreamWriter sw = new StreamWriter(File.Open(CONFIG_FILE, FileMode.Create)))
         {
             string jsonString = JsonConvert.SerializeObject(config, Formatting.Indented);
             sw.Write(jsonString);
             sw.Flush();
         }
         try
         {
             // apply changes to NLog.config
             config.nLogConfig.SetLogLevel(config.isVerboseLogging ? verboseLogLevel : NLogConfig.LogLevel.Info);
             NLogConfig.SaveXML(config.nLogConfig);
         }
         catch (Exception e)
         {
             logger.Error(e, "Cannot set the log level to NLog config file. Please check if the nlog config file exists with corresponding XML nodes.");
         }
     }
     catch (IOException e)
     {
         logger.LogUsefulException(e);
     }
 }