.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+)
转载于: