lenya
4/13/2018 - 1:44 AM

配置设置及读写

配置文件 config

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using Newtonsoft.Json.Linq;
using System.Text;
using Newtonsoft.Json;
using System.Threading;

namespace XXX.WebApp
{
    /// <summary>
    /// 应用配置帮助类。
    /// </summary>
    public static class AppConfigHelper
    {
        private static readonly string _configFileFullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data", "config.json");
        private static JObject _configItems;
        private static readonly ReaderWriterLockSlim _configFileLocker = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);

        static AppConfigHelper()
        {
            var dirPath = Path.GetDirectoryName(_configFileFullPath);
            if (!File.Exists(_configFileFullPath))
            {
                Directory.CreateDirectory(dirPath);
                File.AppendAllText(_configFileFullPath, "{}", Encoding.UTF8);
            }

            BuildItems();
            var fsw = new FileSystemWatcher(dirPath, Path.GetFileName(_configFileFullPath));
            fsw.Changed += delegate(object sender, FileSystemEventArgs e)
            {
                BuildItems();
            };
        }

        private static void BuildItems()
        {
            _configItems = JObject.Parse(File.ReadAllText(_configFileFullPath, Encoding.UTF8)); ;
        }

        private static void SaveItems()
        {
            try
            {
                _configFileLocker.EnterWriteLock();

                var json = JsonConvert.SerializeObject(_configItems, Formatting.Indented);
                File.WriteAllText(_configFileFullPath, json);
            }
            finally
            {
                _configFileLocker.ExitWriteLock();
            }
        }

        private static JObject ConfigItems
        {
            get
            {
                if (_configItems == null)
                    BuildItems();

                return _configItems;
            }
        }

        public static T GetValue<T>(string key)
        {
            return _configItems[key].Value<T>();
        }

        public static string[] GetStringList(string key)
        {
            return _configItems[key].Select(x => x.Value<string>()).ToArray();
        }

        public static string GetString(string key)
        {
            return GetValue<string>(key);
        }

        public static int GetInt(string key)
        {
            return GetValue<int>(key);
        }

        public static T TryGetValue<T>(string key, T defaultValue)
        {
            try
            {
                return _configItems[key].Value<T>();
            }
            catch
            {
                return defaultValue;
            }
        }

        public static string[] TryGetstringList(string key, string[] defaultValue)
        {
            try
            {
                return _configItems[key].Select(x => x.Value<string>()).ToArray();
            }
            catch
            {
                return defaultValue;
            }
        }

        public static string TryGetstring(string key, string defaultValue)
        {
            try
            {
                return GetValue<string>(key);
            }
            catch
            {
                return defaultValue;
            }
        }

        public static int TryGetInt(string key, int defaultValue)
        {
            try
            {
                return GetValue<int>(key);
            }
            catch
            {
                return defaultValue;
            }
        }

        public static void SetValue(string key, JToken value)
        {
            _configItems[key] = value;
            SaveItems();
        }
    }
}
{
  "lastSyncSupplierMtItemsAddedTime": "2018-04-13T07:26:50.8938315+08:00",
  "lastSyncSupplierMtItemsTime": "2018-04-13T07:30:16.6903507+08:00",
  "lastSubscribeForEmployeeTime": "2018-04-10T07:29:21.2044401+08:00",
  "lastSubscribeForSupplierTime": "2018-04-10T07:29:25.7752694+08:00",
  "lastCollectCertifyUploadLostTime": "2018-04-13T07:30:17.5639563+08:00",
  "lastUpdateUserContactTime": "2038-11-20T14:56:54.3219317+08:00",
  "validAntiCheckDays": 3,
  "returnsProcessedEmailTo": "{'7':'xx@boc.cn','8':'xx@boc.cn;','1':'xx@boc.cn;'}",
  "checkManageEmailToRecvGrp": "xx@boc.cn"
}