配置文件 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"
}