**序列化:将(数据)对象转换为可存储或者可传输格式的过程。
反序列化:从物质介质或流(stream)上获取数据(对象)。
目的:将对象持久化(持久化的对象就可以实现永久的存储和值封送)。**
.NET提供2种强大的序列化技术:一种是二进制序列化,另一种是XML序列化。
System.Runtime.Serialization,用于实现二进制序列化,其中IFormatter接口提供了对象序列化的功能,BinaryFormatter和SoapFormatter分别用于将对象序列化为二进制格式和Soap格式。
- 二进制序列化Demo:
[Serializable]
public class UserInfo
{
public string Name;
public Int32 Age;
public bool IsVip;
public UserInfo(string name, Int32 age, bool isVip)
{
Name = name;
Age = age;
IsVip = isVip;
}
}
class Program
{
static void Main(string[] args)
{
BinarySerialize(new UserInfo("wq", 26, false));
var user = BinaryDeserialize();
}
static void BinarySerialize(UserInfo user)
{
var fileStream = new FileStream("MySerialize.bin", FileMode.Create);
var formatter = new BinaryFormatter();
formatter.Serialize(fileStream, user);
fileStream.Close();
}
static UserInfo BinaryDeserialize()
{
var fileStream = new FileStream("MySerialize.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
var formatter = new BinaryFormatter();
var user = formatter.Deserialize(fileStream) as UserInfo;
fileStream.Close();
return user;
}
}
System.Xml.Serialization,用于实现XML序列化,其中最重要的类型为XmlSerializer类,它提供了相应的Serialize方法和Deserialize方法来完成XML格式的序列化和反序列化。(注意:1、XML序列化不能完成方法,索引器,私有字段和制度属性的序列化,而必须由二进制序列化完成。2、需要序列化的对象必须有无参数的构造函数。)
- XML序列化Demo
[Serializable]
public class UserInfo
{
private string Name;//该字段不会再XML中显示
public Int32 Age;
public bool IsVip;
public UserInfo(){}//必须提供无参构造器,否则XmlSerializer将出错
public UserInfo(string name, Int32 age, bool isVip)
{
Name = name;
Age = age;
IsVip = isVip;
}
}
class Program
{
static void Main(string[] args)
{
var xmlSerializer = new XmlSerializer(typeof(UserInfo));
var streamWriter = new StreamWriter("MySerialize.txt");
xmlSerializer.Serialize(streamWriter, user);
streamWriter.Close();
var fileStream = new FileStream("MySerialize.txt", FileMode.Open);
var a = xmlSerializer.Deserialize(fileStream) as UserInfo;
fileStream.Close();
}
}
此处参考自:你必须知道的.NET(第二版) 作者:王涛