zoukankan      html  css  js  c++  java
  • 一步步打造基于ASP.NET的CMS内容管理系统Step2 系统配置(附源代码)

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

     

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

     

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

     

    序列化就是把类转换为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类
    代码
    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 +)

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

  • 相关阅读:
    2018-2019-2 20175214 实验四《Android程序设计》实验报告
    20175214 《Java程序设计》第11周学习总结
    2018-2019-2 20175214 实验三《敏捷开发与XP实践》实验报告
    20175214 《Java程序设计》第9周学习总结
    编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能
    20175214 《Java程序设计》第8周学习总结
    2018-2019-2 20175214 实验二《面向对象程序设计》实验报告
    结对编程项目—四则运算 第二周 整体总结
    事物的传播行为
    mysql数据语句
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/1736548.html
Copyright © 2011-2022 走看看