【发布时间】:2010-10-26 20:24:39
【问题描述】:
我一直在将 resx 文件用于静态字符串,以便有一个中心位置来更改它们。问题是项目构建和部署后我无法更改它们。
我想在部署后更改一些字符串,而无需重新启动进程(因此 .config 文件已失效)。
可以编写高效解析配置文件 (XML/JSON/YAML/?) 的代码,例如将结果缓存 X 秒或使用 FileSystemWatcher 监视它的更改,但是已经完成了类似的操作吗?
编辑:使用 Json.NET 和 Rashmi Pandit 指向 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");
【问题讨论】:
标签: c# asp.net json caching resources