首页 / C# / c#-从文件动态读取资源
c#-从文件动态读取资源
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-从文件动态读取资源,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2608字,纯文字阅读大概需要4分钟。
内容图文
![c#-从文件动态读取资源](/upload/InfoBanner/zyjiaocheng/687/8e95bb242463432a87edaec889449196.jpg)
我一直在为静态字符串使用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");
解决方法:
您可以使用xml文件并将其存储在缓存中.对文件进行任何更改时,都可以使用CacheDependency重新加载缓存.
链接:
CacheDependency:CacheItemUpdateCallback:
在您的情况下,您的缓存应将XmlDocument存储为值
编辑:
这是我的示例代码
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument permissionsDoc = null;
if (Cache["Permissions"] == null)
{
string path = Server.MapPath("~/XML/Permissions.xml");
permissionsDoc = new XmlDocument();
permissionsDoc.Load(Server.MapPath("~/XML/Permissions.xml"));
Cache.Add("Permissions", permissionsDoc,
new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
}
else
{
permissionsDoc = (XmlDocument)Cache["Permissions"];
}
}
private void ReloadPermissionsCallBack(string key, object value, CacheItemRemovedReason reason)
{
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/XML/Permissions.xml"));
Cache.Insert("Permissions", doc ,
new CacheDependency(Server.MapPath("~/XML/Permissions.xml")),
Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration,
CacheItemPriority.Default, new CacheItemRemovedCallback(ReloadPermissionsCallBack));
}
内容总结
以上是互联网集市为您收集整理的c#-从文件动态读取资源全部内容,希望文章能够帮你解决c#-从文件动态读取资源所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。