Я использовал файлы resx для статических строк, чтобы иметь центральное место для их изменения. Проблема в том, что я не могу изменить их после сборки и развертывания проекта.
Есть несколько строк, которые я хотел бы изменить после развертывания, без перезапуска процесса (поэтому файлы .config отсутствуют).
Можно написать код, который эффективно анализирует файл конфигурации (XML / JSON / YAML /?), Например, кэширует результат в течение X секунд или отслеживает его изменения FileSystemWatcher , но что-то подобное уже было сделано?
РЕДАКТИРОВАТЬ: используя Json.NET и указатель Рашми Пандита на CacheDependency
Я написал этот класс анализа JSON, который кэширует проанализированные результаты до тех пор, пока файл не будет изменен:
public class CachingJsonParser
{
public static CachingJsonParser Create()
{
return new CachingJsonParser(
HttpContext.Current.Server,
HttpContext.Current.Cache);
}
private readonly HttpServerUtility _server;
private readonly Cache _cache;
public CachingJsonParser(HttpServerUtility server, Cache cache)
{
_server = server;
_cache = cache;
}
public T Parse<T>(string relativePath)
{
var cacheKey = "cached_json_file:" + relativePath;
if (_cache[cacheKey] == null)
{
var mappedPath = _server.MapPath(relativePath);
var json = File.ReadAllText(mappedPath);
var result = JavaScriptConvert.DeserializeObject(json, typeof(T));
_cache.Insert(cacheKey, result, new CacheDependency(mappedPath));
}
return (T)_cache[cacheKey];
}
}
Использование
Файл JSON:
{
"UserName": "foo",
"Password": "qwerty"
}
Соответствующий класс данных:
class LoginData
{
public string UserName { get; set; }
public string Password { get; set; }
}
Парсинг и кеширование:
var parser = CachingJsonParser.Create();
var data = parser.Parse<LoginData>("~/App_Data/login_data.json");