序列化用途:
1、在进程下次启动时读取上次保存的对象的信息
2、在不同的AppDomain或进程之间传递数据
3、在分布式应用系统中传递数据
常见的序列化的方法:
1、BinaryFormatter
2、SoapFormatter
3、XML序列化
用法:
BinaryFormatter的用法大致如下:
//BinaryFormatter将对象序列化到文件中List<string> inputList = new List<string>() { "str1","str2","str3"}
using (FileStream fsWriter = new FileStream(@"tmp.dat",FileMode.Create,FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter()
//序列化
bf.Serialize(fsWriter, inputList)
}
//BinaryFormatter将文件中的数据反序列化出来
List<string> outputList = new List<string>()
using (FileStream fsReader = new FileStream(@"tmp.dat",FileMode.Open,FileAccess.Read))
{
BinaryFormatter bf = new BinaryFormatter()
//反序列化
outputList = (List<string>)bf.Deserialize(fsReader)
}
XML序列化的用法大致如下:
//xml序列化到tmp.xml文件中List<string> inputList = new List<string>() { "str1","str2"}
using (FileStream fsWriter = new FileStream(@"tmp.xml",FileMode.Create,FileAccess.Write))
{
XmlSerializer xs = new XmlSerializer(typeof(List<string>))
xs.Serialize(fsWriter, inputList)
}
//从tmp.xml文件中反序列化出来
List<string> outputList = new List<string>()
using (FileStream fsReader = new FileStream(@"tmp.xml",FileMode.Open,FileAccess.Read))
{
XmlSerializer xs = new XmlSerializer(typeof(List<string>))
outputList = xs.Deserialize(fsReader) as List<string>
}
总结:
两个的用法大致如下:
序列化:
1.得到一个存储对象的类型
2.创建一个写入文件流
3.定义要序列化的类型
4.调用序列化方法
反序列化:
1.定义一个装载对象的类型
2.创建一个读出文件流
3.定义要反序列化的类型
4.调用反序列化方法
BinaryFormatter类进行序列化和反序列化,以缩略型二进制格式写到一个文件中去,速度比较快,而且写入后的文件已二进制保存有一定的保密效果。标记为NonSerialized的其他所有成员都能序列化。
采用xml序列化的方式只能保存public的字段和可读写的属性,对于private等类型的字段不能进行序列化。
二进制序列化的优点:
1. 所有的类成员(包括只读的)都可以被序列化;
2. 性能非常好。
XML序列化的优点:
1. 互 *** 作性好;
2. 不需要严格的二进制依赖;
3. 可读性强
///<summary>///序列化
/// </summary>///
<param name="data">要序列化的对象</param>
/// <returns>返回存放序列化后的数据缓</returns>
public static byte[] Serialize(object data)
{
BinaryFormatter formatter = new BinaryFormatter()
MemoryStream rems = new MemoryStream()
formatter.Serialize(rems, data)
return rems.GetBuffer()
}
/// <summary>/// 反序列化 /// </summary>
/// <param name="data">数据缓冲区</param>
/// <returns>对象</returns>
public static object Deserialize(byte[] data)
{
BinaryFormatter formatter = new BinaryFormatter()
MemoryStream rems = new MemoryStream(data)
data = nullreturn formatter.Deserialize(rems)
}
序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用。我想最主要的作用有:
1、在进程下次启动时读取上次保存的对象的信息
2、在不同的AppDomain或进程之间传递数据
3、在分布式应用系统中传递数据
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)