一步步打造基于ASP.NET的CMS内容管理系统--Step2 系统配置(附源代码)

本文详细介绍了如何在DotNetCMS Portal中使用XML文件进行应用程序配置管理,包括配置文件的创建、序列化与反序列化过程,以及如何通过自定义类和接口进行配置读写操作。同时,文章提供了配置文件读写方法的源代码,适用于企业内部网站建设。

许多应用程序都需要配置,例如在Dotnetcms Portal里就有对应用程序的简单配置需求,在线演示:http://portal.dotnetcms.org/ep/portal/admin/setting.aspx 

 2010051608263961.png

这种配置可以用数据库作为存储,但是仅仅为了一个记录,建立一个表格,有点太浪费,所以最好用xml进行以文本方式存放,在配置不大的情况下,读写文本文件比数据库要快,例如在本例中,我们可以把程序配置叫做portal.xml,但是.NET有一个更优雅的配置名称:config,所以这里我们就把系统设置,命名为portal.config,至少,在本系统里,如果以后有投票配置、邮件配置,命名为vote.config,email.config好听又好理解。

 

Portal.config里存放的是应用程序的配置,对他的读取,我们可以利用像读取txt文件一样读其他,然后进行处理,但是还有更好的方式:序列化和反序列化。先看示意图,似乎有点类似数据库中的ORM,也就是一个xml的配置节对应一个类的属性

 2010051608271193.png

序列化就是把类转换为XML

反序列化就是把XML转换为类

NET提供了三种序列化方式XML Serializer,SOAP Serializer,BinarySerializer.

 要使一个类可序列化,最简单的方法是使用 Serializable 属性对它进行标记,如下所示:

    [Serializable

    public class Class

    { } 

但是也可以传递类类别。

 将类的实例序列化成一个Xml文件核心代码是

XmlSerializer ser = new XmlSerializer(obj.GetType());

ser.Serialize(new FileStream(@"portal.config, FileMode.Create), obj);

     反序列化:

XmlSerializer serializer = new XmlSerializer(Type.GetType("MyObject"));

MyObject my=(MyObject)serializer.Deserialize(new FileStream(@"users.xml",FileMode.Open));

 因此,这里我们模仿了DiscuzNT的方式,首先设定了一个序列化/反序列化的类码

 

   public static string Serialize(object obj)        {            string returnStr = "";            XmlSerializer serializer = GetSerializer(obj.GetType());            MemoryStream ms = new MemoryStream();            XmlTextWriter xtw = null;            StreamReader sr = null;            try            {                xtw = new System.Xml.XmlTextWriter(ms, Encoding.UTF8);                xtw.Formatting = System.Xml.Formatting.Indented;                serializer.Serialize(xtw, obj);                ms.Seek(0, SeekOrigin.Begin);                sr = new StreamReader(ms);                returnStr = sr.ReadToEnd();            }            catch (Exception ex)            {                throw ex;            }            finally            {                if (xtw != null)                    xtw.Close();                if (sr != null)                    sr.Close();                 ms.Close();            }            return returnStr;        }        public static object DeSerialize(Type type, string s)        {             byte[] b = System.Text.Encoding.UTF8.GetBytes(s);            try            {                XmlSerializer serializer = GetSerializer(type);                return serializer.Deserialize(new MemoryStream(b));            }            catch (Exception ex)            {                throw ex;            }        }

 

 

   接下来,定义一个 IConfigInfo和PortalConfigFileManager 方便我们扩展,其中后者包含了LoadConfig(),SaveConfig()用来读写配置文件,
(注:本文不是介绍面向对象的文章,如果您不熟悉类,接口,虚拟方法等,可以找些这方面的书,此处我们认为您已经熟悉这些内容,本文附近包含所有源代码)
下面看看我们的portalinfo类

 
ContractedBlock.gif ExpandedBlockStart.gif 代码

   
public class PortalConfigInfo: IConfigInfo
{
public int Thumwidth{ get ; set ;}
public int Thumheight { get ; set ; }
public string Isthumhighquality { get ; set ; }
public string Sitetitle { get ; set ; }
public string Keywords { get ; set ; }
public string Description { get ; set ; }
public string Comment { get ; set ; }

}

 

现在,在Setting.aspx的Page_Load里读取配置,调用GetConfig方法
 
 PortalConfigInfo portalInfo = PortalConfigs.GetConfig();
                thumheight.Text = portalInfo.Thumheight.ToString();
                thumwidth.Text = portalInfo.Thumwidth.ToString();

 

 

...
 
 保存也超级简单,
...
 portalInfo.Isthumhighquality = Isthumhighquality.SelectedItem.Value;
            portalInfo.Comment = comment.SelectedItem.Value;
            PortalConfigs.SaveConfig(portalInfo);

OK,这样一个配置文件读写就完成了。

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

以下是广告时间,请别走开,精彩马上回来

Dotnetcms Portal (DEMO: http://portal.dotnetcms.org )主要面向企业内部网站建设,Dotnetcms 是有很多模块组成,我们也在不断完善系统 后台

 http://portal.dotnetcms.org/ep/portal/admin/setting.aspx

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

本文源代码下载(.NET3.5 +)

 http://files.cnblogs.com/mqingqing123/DemoXML.rar

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值