看书的时候,看到的。然后感觉书上的写的不清楚,于是自己写了一下。还真的有问题。 要进行序列化和反序列化,首先要定义一个可以序列化的类,方法是在类的声明前加上特性 [Serializable] 定义了一个简单的用户类,需要注意的是私有字段是不能序列化的,只有公有字段和公有属性才可以。如下
[Serializable] //特性,可以序列化
public class UserData
{
public string Name;
public int Age;
private string sex;
public string Sex
{
set{sex=value;}
get{return sex;}
}
public UserData()
{
}
public UserData(string name, int age, string sex)
{
Name = name;
Age = age;
Sex = sex;
}
}
注意,书上有个例子没有给出默认的构造函数,实际测试时如果没有默认构造函数,是不能执行xml序列化的。注意。
然后就导入需要的命名空间。 需要导入
using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Xml.Serialization;
分贝对应文件操作,二进制序列化和xml序列化
为了方便,我封装了四个静态函数,用于实现序列化和反序列化。
//封装二进制序列化方法
public static void BinarySerialize(UserData user)
{
FileStream fs = new FileStream("user.bin", FileMode.Create);
BinaryFormatter formater = new BinaryFormatter();
//执行序列化
formater.Serialize(fs, user);
fs.Close();
}
//封装二进制反序列化方法
public static UserData BinaryDeserialize()
{
FileStream fs = new FileStream("user.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter formater = new BinaryFormatter();
UserData user = formater.Deserialize(fs) as UserData;
fs.Close();
return user;
}
//封装xml序列化方法
public static void XmlSerialize(UserData user)
{
XmlSerializer serializer = new XmlSerializer(typeof(UserData));
FileStream fs = new FileStream("user.xml", FileMode.Create);
serializer.Serialize(fs, user);
fs.Close();
}
//封装xml反序列化方法
public static UserData XmlDeserialize()
{
XmlSerializer serializer = new XmlSerializer(typeof(UserData));
FileStream fs = new FileStream("user.xml", FileMode.Open);
UserData user = serializer.Deserialize(fs) as UserData;
fs.Close();
return user;
}
代码比较简单。 最后是一个简单的测试。
static void Main(string[] args)
{
UserData user = new UserData("bystander", 20, "man");
UserData userAfterBin;
UserData userAfterXml;
//二进制序列化测试
BinarySerialize(user);
//二进制反序列化
userAfterBin = BinaryDeserialize();
Console.WriteLine("二进制反序列化测试");
Console.WriteLine("Name:{0}\nAge:{1}\nSex:{2}", userAfterBin.Name, userAfterBin.Age, userAfterBin.Sex);
//xml序列化测试
XmlSerialize(user);
//xml反序列化测试
userAfterXml = XmlDeserialize();
Console.WriteLine("XML反序列化测试");
Console.WriteLine("Name:{0}\nAge:{1}\nSex:{2}", userAfterXml.Name, userAfterXml.Age, userAfterXml.Sex);
}