赞
踩
序列化定义:将对象转化为容易传输的格式的过程。
反序列化定义:重新解析构造被序列化的对象
NET框架提供了两种串行化的方式:
1、是使用BinaryFormatter进行串行化;
2、使用SoapFormatter进行串行化;
3、使用XmlSerializer进行串行化。
第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息,而第二种将数据流格式化为XML存储;第三种其实和第二种差不多也是XML的格式存储,只不过比第二种的XML格式要简化很多(去掉了SOAP特有的额外信息)。可以使用[Serializable]属性将类标志为可序列化的。如果某个类的元素不想被序列化,1、2可以使用[NonSerialized]属性来标志,2、可以使用[XmlIgnore]来标志。
1、创建一个可序列化的类
namespace test1
{
[Serializable]
public class Person
{
public string sno { get; set; }
public string name { get; set; }
public string sex { get; set; }
public int age { get; set; }
public string displayInfo()
{
return "我的学号是:" + sno + "\n我的名字是:" + name + "\n我的性别为:" + sex + "\n我的年龄:" + age + "\n";
}
}
}
2、BinaryFormatter序列化方式
private void btn_start_Click(object sender, EventArgs e) { Person me = new Person { sno = "200719", name="yyyyyyy", sex="man", age=22 }; //创建一个格式化程序实例 IFormatter formatter = new BinaryFormatter(); try { //创建一个文件流,如果D盘目录下没有就会自动创建一个此文件 Stream stream = new FileStream("D:/personInfo.txt",FileMode.OpenOrCreate,FileAccess.Write,FileShare.None); formatter.Serialize(stream, me); stream.Close(); } catch(Exception ex) { Console.WriteLine(ex.Message); } }
执行这个序列化程序后就会在D盘根路径创建一个personInfo.txt文件。
反序列:
private void btn_start_Click(object sender, EventArgs e)
{
//创建一个格式化程序的实例
IFormatter foramtter = new BinaryFormatter();
Stream destream = new FileStream("D:/personInfo.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
var stillme = (Person)foramtter.Deserialize(destream);
Console.WriteLine(stillme.displayInfo());
}
private void btn_start_Click(object sender, EventArgs e) { Person me = new Person { sno = "200719", name = "yyyyyyy", sex = "man", age = 22 }; //创建一个格式化程序实例 IFormatter formatter = new SoapFormatter(); try { //创建一个文件流 Stream stream = new FileStream("c:/personInfo.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); formatter.Serialize(stream, me); stream.Close(); Console.WriteLine("序列化结束!\n"); Console.WriteLine("反序列化开始……"); //反序列化 Stream destream = new FileStream("c:/personInfo.txt", FileMode.Open, FileAccess.Read, FileShare.Read); var stillme = (Person)formatter.Deserialize(destream); stream.Close(); Console.WriteLine("反序列化结束,输出对象信息……"); Console.WriteLine(stillme.displayInfo()); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
private void btn_start_Click(object sender, EventArgs e) { Person me = new Person { sno = "200719", name = "yyyyyyy", sex = "man", age = 22 }; //创建一个格式化程序实例 XmlSerializer formatter = new XmlSerializer(typeof(Person)); try { //创建一个文件流 Stream stream = new FileStream("c:/personInfo.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); formatter.Serialize(stream, me); stream.Close(); Console.WriteLine("序列化结束!\n"); Console.WriteLine("反序列化开始……"); //反序列化 Stream destream = new FileStream("c:/personInfo.txt", FileMode.Open, FileAccess.Read, FileShare.Read); var stillme = (Person)formatter.Deserialize(destream); stream.Close(); Console.WriteLine("反序列化结束,输出对象信息……"); Console.WriteLine(stillme.displayInfo()); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。