.net网站内容管理系统(将类的实例序列化成一个Xml文件核心代码是什么?)

优采云 发布时间: 2022-04-18 18:30

  .net网站内容管理系统(将类的实例序列化成一个Xml文件核心代码是什么?)

  许多应用程序都需要配置。例如,DotnetcmsPortal 中的应用程序有一个简单的配置要求。在线演示:

  

  这个配置可以存储在数据库中,但是只为一条记录建表有点太浪费了,所以最好使用xml以文本方式存储。数据库速度更快。比如在这个例子中,我们可以调用程序配置portal.xml,但是.NET有一个更优雅的配置名称:config,所以这里我们调用系统设置portal.config,至少,在这个系统中,如果有是投票配置和未来的邮箱配置,命名为vote.config,email.config很好看,通俗易懂。

  Portal.config 存储应用程序的配置。对于它的读取,我们可以像读取txt文件一样使用它来读取其他文件,然后进行处理,但是有更好的方法:序列化和反序列化变化。先看*敏*感*词*,好像有点像数据库中的ORM,就是一个xml配置节对应一个类属性

  

  序列化正在将一个类转换为 XML

  反序列化正在将 XML 转换为类

  NET 提供了三种序列化方法:XMLSerializer、SOAPSerializer、BinarySerializer。

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

  [可序列化]

  公共类

  {}

  但类类别也可以传递。

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

  XmlSerializerser=newXmlSerializer(obj.GetType());

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

  反序列化:

  XmlSerializerserializer=newXmlSerializer(Type.GetType("MyObject"));

  MyObjectmy=(MyObject)serializer.Deserialize(newFileStream(@"users.xml",FileMode.Open));

  所以,这里我们模仿DiscuzNT的方式,先设置一个序列化/反序列化类代码

  public static string Serialize(object obj) { string returnStr = ""; XmlSerializer 序列化器 = GetSerializer(obj.GetType());内存流毫秒 = 新的内存流(); XmlTextWriter xtw = null; StreamReader sr = null;尝试 { 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类

  

  

  代码

  publicclass PortalConfigInfo: IConfigInfo

  {

  publicint Thumwidth{get;设置;}

  publicint Thumheight { 获取;放; }

  publicstring Isthumhighquality { get;放; }

  publicstring 站点标题 { 获取;放; }

  publicstring 关键字 { get;放; }

  publicstring 描述 { get;放; }

  publicstring 注释 { get;放; }

  }

  现在,在Setting.aspx的Page_Load里读取配置,调用GetConfig方法

   

   PortalConfigInfo portalInfo = PortalConfigs.GetConfig();<br />                thumheight.Text = portalInfo.Thumheight.ToString();<br />                thumwidth.Text = portalInfo.Thumwidth.ToString();

  ...

   

   保存也超级简单,

  ...

   portalInfo.Isthumhighquality = Isthumhighquality.SelectedItem.Value;<br />            portalInfo.Comment = comment.SelectedItem.Value;<br />            PortalConfigs.SaveConfig(portalInfo);

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

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

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

  Dotnetcms Portal(DEMO: )主要针对企业内部建设网站,Dotnetcms由很多模块组成,我们正在不断完善系统后台

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

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

  转载于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线