.net 序列化、反序列化技术
- 【序列化】 就是将我们程序中的对象通过字节流写入存储媒体或网络中。
- 【反序列化】 就是把已存入的媒体或接收的网络流中的内容转换成程序运行中的对象。
实现方式: 二进制序列化 XML序列化
二进制序列化需要引入System..Runtime.Serialization.Formatters.Binary 中的BinaryFormatter类, 序列化方法为Serialize(Stream s, object o), 反序列化方法DeSerialize(Stream s).
XML序列化可分为Soap格式和一般xml格式序列化。分别采用System.Runtime.Serialization.Formatters.Soap.SoapFormatter 和 XmlSerializer类的以上两种方法;
示例:
1)用到类User
[Serializable]
public class User
... {
public class User
... {
[NonSerialized] //不对_usercode进行序列化, [NoSerialized]只能加在域成员前面
private string _usercode;
private string _username;
public string UserCode
...{
get ...{ return _usercode; }
set ...{ _usercode = value; }
}
public string UserName
...{
get ...{ return _username; }
set ...{ _username = value; }
}
}
private string _usercode;
private string _username;
public string UserCode
...{
get ...{ return _usercode; }
set ...{ _usercode = value; }
}
public string UserName
...{
get ...{ return _username; }
set ...{ _username = value; }
}
}
2)
二进制序列化
FileStream fs
=
new
FileStream(
@"
D:/user.dat
"
, FileMode.OpenOrCreate);
User user = new User();
user.UserCode = " 0001 " ;
user.UserName = " KILL " ;
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, user);
fs.Close();
User user = new User();
user.UserCode = " 0001 " ;
user.UserName = " KILL " ;
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, user);
fs.Close();
3)二进制反序列化
FileStream fs
=
new
FileStream(
@"
D:/user.dat
"
, FileMode.OpenOrCreate);
BinaryFormatter bf = new BinaryFormatter();
User user = (User)bf.Deserialize(fs);
fs.Close();
Response.Write(user.UserCode + user.UserName); // 因为User类中限制将usercode进行序列化, 所以UserCode =""
BinaryFormatter bf = new BinaryFormatter();
User user = (User)bf.Deserialize(fs);
fs.Close();
Response.Write(user.UserCode + user.UserName); // 因为User类中限制将usercode进行序列化, 所以UserCode =""
4) XML序列化,反序列化--SoapFormatter
//
序列化
FileStream fs = new FileStream( @" D:/user.dat " , FileMode.OpenOrCreate);
SoapFormatter sf = new SoapFormatter();
User user = new User();
user.UserName = " KKK " ;
user.UserCode = " 0001 " ;
sf.Serialize(fs, user);
fs.Close();
// 反序列化
FileStream fs = new FileStream( @" D:user.dat " , FileMode.OpenOrCreate);
SoapFormatter sf = new SoapFormatter();
User user = (User)sf.Deserialize(fs);
fs.Close();
Response.Write(user.UserCode + user.UserName); // 因为User类中限制将usercode进行序列化, 所以UserCode =""
FileStream fs = new FileStream( @" D:/user.dat " , FileMode.OpenOrCreate);
SoapFormatter sf = new SoapFormatter();
User user = new User();
user.UserName = " KKK " ;
user.UserCode = " 0001 " ;
sf.Serialize(fs, user);
fs.Close();
// 反序列化
FileStream fs = new FileStream( @" D:user.dat " , FileMode.OpenOrCreate);
SoapFormatter sf = new SoapFormatter();
User user = (User)sf.Deserialize(fs);
fs.Close();
Response.Write(user.UserCode + user.UserName); // 因为User类中限制将usercode进行序列化, 所以UserCode =""
5) XML序列化,反序列化--XmlSerializer
// 序列化
FileStream fs = new FileStream( @" D:/user.xml " , FileMode.OpenOrCreate);
User user = new User();
user.UserName = " KKK " ;
user.UserCode = " 0001 " ;
XmlSerializer xsl = new XmlSerializer(typeof(User));
xsl.Serialize(fs, user);
fs.Close();
// 反序列化
FileStream fs = new FileStream( @" D:/user.dat " , FileMode.OpenOrCreate);
XmlSerializer xsl = new XmlSerializer();
User user = (User)xsl.Deserialize(fs);
fs.Close();
Response.Write(user.UserCode + user.UserName); // 因为User类中限制将usercode进行序列化, 所以UserCode =""
xsl.Serialize(fs, user);
fs.Close();
// 反序列化
FileStream fs = new FileStream( @" D:/user.dat " , FileMode.OpenOrCreate);
XmlSerializer xsl = new XmlSerializer();
User user = (User)xsl.Deserialize(fs);
fs.Close();
Response.Write(user.UserCode + user.UserName); // 因为User类中限制将usercode进行序列化, 所以UserCode =""