/// <summary>
 /// Init method is called in the constructor
 /// Calling Init functino separatly is not recommended
 /// </summary>
 public void Init()
 {
     if (File.Exists(_jsonFilePath))
     {
         try
         {
             _data = LoadDefaultValueModelFromConfigFile(_jsonFilePath);
         }
         catch (Exception ex)
         {
             throw new InvalidDataException("JSON provider initialize fail. The provided json file is not valid." + ex.StackTrace);
         }
     }
     else
     {
         if (_createNewConfigFileIsNotExist)
         {
             var noDataModel = new WQDefaultValueModel();
             var saveSuccess = this.SaveDefaultValueConfiguration(noDataModel);
             if (!saveSuccess)
             {
                 throw new InvalidDataException("Save JSON provider data fail, please contact the EIS group");
             }
             _data = noDataModel;
         }
         else
         {
             throw new FileNotFoundException("JSON provider initialize fail. The provided path " + _jsonFilePath + " could not be found.");
         }
     }
 }
        public bool SaveDefaultValueConfiguration(WQDefaultValueModel data)
        {
            _data = data;

            var fileMode = File.Exists(_jsonFilePath) ? FileMode.Open : FileMode.CreateNew;

            try
            {
                using (FileStream fs = File.Open(_jsonFilePath, fileMode))
                    using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
                        using (JsonWriter jw = new JsonTextWriter(sw))
                        {
                            jw.Formatting = Formatting.Indented;

                            JsonSerializer serializer = new JsonSerializer();
                            serializer.Serialize(jw, data);
                        }
            }
            catch (Exception ex)
            {
                return(false);
            }

            return(true);
        }
        private WQDefaultValueModel LoadDefaultValueModelFromConfigFile(string jsonFilePath)
        {
            using (FileStream fs = File.Open(jsonFilePath, FileMode.Open))
            {
                using (StreamReader reader = new StreamReader(fs, System.Text.Encoding.UTF8))
                {
                    using (JsonReader jr = new JsonTextReader(reader))
                    {
                        JsonSerializer serializer = new JsonSerializer();

                        try
                        {
                            return(serializer.Deserialize <WQDefaultValueModel>(jr));
                        }
                        catch (Exception ex)
                        {
                            if (_wayToLoadConfigFile == WayToLoadConfigFile.ThrowExceptionIfLoadFail)
                            {
                                throw ex;
                            }
                            else if (_wayToLoadConfigFile == WayToLoadConfigFile.CreateNewConfigFileIfLoadFail)
                            {
                                var noDataModel = new WQDefaultValueModel();
                                var saveSuccess = this.SaveDefaultValueConfiguration(noDataModel);
                                if (!saveSuccess)
                                {
                                    throw new InvalidDataException("Save JSON provider data fail, please contact the EIS group");
                                }
                                return(noDataModel);
                            }
                            else
                            {
                                throw new ArgumentException(_wayToLoadConfigFile.ToString() + " is not a valid way to load config file.");
                            }
                        }
                    }
                }
            }
        }