首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网页制作-> Javascript教程
利用.NET的XML序列化解决系统配置问题-.NET教程,XML应用
作者:网友供稿 点击:39
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
在web系统开发中,我们经常需要读取和设置一些系统配置项,常见的例如数据库连接字符串、上传路径等等。

在最初的asp系统中,比较常用的方法是将值保存为application或session变量;在asp.net系统中,目前比较常见的简单方法是把相应的配置项写入web.config中,例如

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
...
</system.web>
<appsettings>
<add key="connectionstring" value="server=(local);database=dbname;uid=username;pwd=password"/>
</appsettings>
</configuration>



然后在程序中通过如下方式读取

string connstring = configurationsettings.appsettings["connectionstring"];




这种方法在系统规模较小复杂度较低的时候也不失为一种简单明了的轻量级方法,不过如果系统较复杂,配置项会较多,同时我们需要按不同模块对配置进行划分,并且还希望能以面向对象方法来对其进行封装,那么如果仍然采用这种过于简化方式就不太合时宜了。

-----------------------------------------------------------------

下面,我讲述一下通过xml类序列化解决系统配置问题的方法。

关于xml类序列化和反序列化(另外一种描述是串行化和并行化)的技术细节,大家可以查看msdn了解;这里简单讲两句,xml序列化是把一个对象序列化到xml文档的过程,反序列化则是从xml输出中重新创建原始状态的对象。

直观表现就是如下图模式


看了这个图,就很清楚了,通过序列化,可以采用面向对象的方法,非常自然和方便的读取和设置系统配置;.net framework承担了对象和xml文件映射工作,我们只需要简单的使用就ok。下面我们讲一下具体内容。

上面图示已经表明,首先需要一个xml配置文件,格式内容如上图,具体配置项可以自行增减。

然后我们需要编写一个类,如上图所示;特殊的一点,为了使类能够实现xml序列化,需要在类的所有属性声明前添加属性信息xmlelement,如下所示。

[xmlelement]
public string connectionstring
{
get { return connectionstring; }
set { connectionstring = value; }
}



由于appconfig类本身没有实现方法,因此我们需要一个配置类appconfigsetting.cs。类的结构很简单,只需要两个静态方法,get()获取appconfig对象,save()保存appconfig对象。

另外,我们需要在 web.config中添加该xml配置文件的地址。

<appsettings>
<add key="appconfigpath" value="/filepath/file.config"/>
</appsettings>



public class appconfigsetting
{
//获取配置对象
public static appconfig get()
{
//尝试获取缓存中的对象
appconfig config = (appconfig)httpcontext.current.cache["appconfig"];
//如果缓存中没有该配置对象,则直接获取对象
if (config == null)
{
//新建序列化对象并指定其类型
xmlserializer serial = new xmlserializer(typeof(appconfig));

try
{
string file = httpcontext.current.server.mappath(getfile());

//读取文件流
filestream fs = new filestream(file, filemode.open);

//文件流反序列化为对象
config = (appconfig)serial.deserialize(fs);
fs.close();

//将对象加入到缓存中
httpcontext.current.cache.insert("appconfig", config, new cachedependency(file));
}
catch (system.io.filenotfoundexception)
{
config = new appconfig();
}
}

return config;
}
//保存配置对象
public static void save(appconfig config)
{
string file = httpcontext.current.server.mappath(getfile());
xmlserializer serial = new xmlserializer (typeof(appconfig));
filestream fs = new filestream(file, filemode.create);
//对象序列化为文件
serial.serialize(fs, config);
fs.close();
}
//获取配置文件路径
private static string getfile()
{
string path = (string)httpcontext.current.cache["filepath"];
if (path == null)
{
path=configurationsettings.appsettings["appconfigpath"];
httpcontext.current.cache["filepath"] = path;
}
return path;
}
}




类的使用非常简单,基本方式如下

//代码仅为使用演示
appconfig config = appconfigsetting.get();
string connstring = config.connectionstring;
...
config.connectionstring = connstring;
appconfigsetting.save(config);



看到这样的代码,不禁有令人赏心悦目之感;相对于原来的直接读取appsetting,可谓解脱矣! :)


ok,就此结束了。这篇文章只涉及对象序列化的非常简单的应用,没有涉及太多的技术原理和细节,大家要深入了解请参考msdn。

希望文章能对大家有所补益和启发。 :)

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·基于cpld的数字触发电路的设计
·消息队列(Message Queue)简介及其使用-.NET教程,评论及其它
·session_register()出错的解决办法-PHP教程,其它文章
·卫星通信中tcp协议分析改进方法研究
·漫谈Java语言的接口与类型安全-JSP教程,Java技巧及代码
·SQL SERVER2005連接字串中的@3/29-.NET教程,数据库应用
·自创]JCreator安装学习使用方法-数据库专栏,SQL Server
·ASP.NET 数据绑定常用代码-.NET教程,Asp.Net开发
·如何在J2ME的低级界面中轻松实现各种文字的自然分行显示-JSP教程,J2ME开发
·通信设备pac模块式开关电源的原理与维修
最新文章
·photoshop将肖像照片处理为铅笔素描_photoshop教程
·个人网站做联盟广告的几点经验_网赚技巧
·适合与不适合做google adsense的站_网赚技巧
·gg网赚之:怎么样利用e文站轻松月入100刀_网赚技巧
·黄明明归国创业寻觅伙伴:人品好是必要条件_站长访谈
·最普通的7种软文类型_站长访谈
·第九城市ceo朱骏 网海中闯出一片天_站长访谈
·反波访谈:听keso乱弹琴_站长访谈
·人性和互联网_站长心得
·大型网站常用的五种推广方法_站长心得
相关主题
  • 利用.net反射动态调用指定程序集的中的方法_asp.net技巧
  • 利用.NET的File控件上传文件的最终解决方案(个人版)-.NET教程,Asp.Net开发
  • 利用.NET语言开发自己的脚本语言(二)--动态编译-.NET教程,.NET Framework
  • 利用.NET语言开发自己的脚本语言(一)-.NET教程,.NET Framework
  • 利用.NET的Reflection增强对象工厂的扩展性-.NET教程,.NET Framework
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭