技术开发 频道

.Net高级编程之序列化


[Serializable]//该标签表示User类型可序列化 
class User:ISerializable
{
public string name;
public int age;
public int temp=0;
public DateTime saveTime=DateTime.MinValue;
public override string ToString()
{
return "Name: " + name + "\tAge: " + age.ToString() +"\tTemp:"
+ temp.ToString() + "\tSaveTime:" + saveTime.ToString();
}


public User()
{

}
//这个公共构造函数必须在实现接口ISerializable之后被实现,否则将无法被反序列化
public User(SerializationInfo info, StreamingContext context)
{
//将各参数值取出来
name = info.GetString("name");
age = info.GetInt32("age");
saveTime = info.GetDateTime("saveTime");

}


#region ISerializable Members

public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.SetType(typeof(User)); //设置对象类型
//添加序列化的数据
info.AddValue("name", name);
info.AddValue("age", age);
// Temp 不需要被序列化,所以我们并未将其增加到info
info.AddValue("saveTime", DateTime.Now); //saveTime取当前的时间,以便满足我们的需求
}

#endregion
}
XML序列化

    XML文档拥有诸多的优点,可以按照层次结构存储数据,可以直接手工读写,将数据序列化为XML文档显然更加适合网络传输和多个应用程序之间的交互;利用XML存储的配置文件也能够进行手工修改。不多说了,我们还是演示一下XML序列化是如何被实现的,下面的代码使用System.Xml.Serialization.XmlSerializer对上个例子里面的User类型进行序列化。

static void Main(string[] args) 
{
StringBuilder sb = new StringBuilder();
XmlWriter xw = XmlWriter.Create(sb);
XmlSerializer xs = new XmlSerializer(typeof(User));

User user = new User();//创建一个用户对象
user.name = "张三";
user.age = 20;
xs.Serialize(xw, user);

Console.Write(sb.ToString());//打印序列化产生的xml文档
Console.ReadKey();
}
输出结果是:
<?xml version="1.0" encoding="utf-16"?> 
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name>张三</name>
<age>20</age>
<temp>0</temp>
<saveTime>0001-01-01T00:00:00</saveTime>
</User>

0