序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。
重点介绍一下xml的序列化
序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。反之,反序列化根据流重新构造对象。XML 序列化仅将对象的公共字段和属性值序列化为 XML 流。XML 序列化不包括类型信息。XML 序列化中最主要的类是 XmlSerializer 类,它的最重要的方法是 Serialize 和 Deserialize 方法。
如以下的xml文件
<?xml version="1.0"?>
<ModuleSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ConnectionString>server=CHARUL\NetSDK;database=ThePhile;uid=sa;pwd=;</ConnectionString>
<NewsUrl>http://localhost/thephile/modules/newsmanager/shownews.aspx</NewsUrl>
<AbstractLength>150</AbstractLength>
</ModuleSettings>
现在我要创建一个自定义类,该类有以下属性:ConnectionString/NewsUrl/AbstractLength,可以通过上面的属性直接访问该xml中的相应字段的值。
public class ModuleSettings
{
private string connectionString;
private string newsUrl;
private int abstractLength;
[XmlElement]
public string ConnectionString
{
get { return connectionString; }
set { connectionString = value; }
}
[XmlElement]
public string NewsUrl
{
get { return newsUrl; }
set { newsUrl = value; }
}
[XmlElement]
public int AbstractLength
{
get { return abstractLength; }
set { abstractLength = value; }
}
}
public class ModuleConfig
{
public static ModuleSettings GetSettings()
{
HttpContext context = HttpContext.Current;
ModuleSettings data = (ModuleSettings)context.Cache["Settings"];
if (data == null)
{
//序列化的过程
XmlSerializer serializer = new XmlSerializer(typeof(ModuleSettings));
try
{
string fileName = HttpContext.Current.Server.MapPath(GetSettingsFile());
FileStream fs = new FileStream(fileName, FileMode.Open);
data = (ModuleSettings)serializer.Deserialize(fs);
fs.Close();
context.Cache.Insert("Settings", data, new CacheDependency(fileName));
}
catch (System.IO.FileNotFoundException)
{
data = new ModuleSettings();
}
}
return data;
}
//反序列化,保存为xml文件
public static void SaveSettings(ModuleSettings data)
{
string fileName = HttpContext.Current.Server.MapPath("xxx.xml");
XmlSerializer serializer = new XmlSerializer (typeof(ModuleSettings));
FileStream fs = new FileStream(fileName, FileMode.Create);
serializer.Serialize(fs, data);
fs.Close();
}
}
这样我们可以调用GetSettings()方法得到ModuleSettings的一个实例,通过ModuleSettings的属性来访问xml文档中的相应节点的值.
更多的使用请参考.Net Framework 2.0 SDK