博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#基础之序列化

Posted on 2011-01-21 11:36  Mr.X  阅读(884)  评论(6编辑  收藏  举报

      呵呵。。。 好久时间没有更新博客了 因为年底了 手上的项目 都等着上线 所以比较忙。现在 好了一点 就来写点东西吧!~  时间关系 今天就简单讲讲序列化。

      序列化是什么?它是可以将对象的状态转换成可以保持或传输的的过程,和它一起的还有一个反序列化,它是可以将流转换为对象的过程,一起使用就可以实现 对象的传输。.net 提供2序列化  一种是序列化为XML文件 一种是序列化为二进制文件,我们今天来演示序列化为XML文件。 看如下代码

public class Student
{
private string name;
private string sex;
private decimal age;

public Student()
{ }

public Student(string name, string sex, decimal age)
{
this.name = name;
this.sex = sex;
this.age = age;
}

public string Name
{
get { return name; }
set { name = value; }
}

public string Sex
{
get { return sex; }
set { sex = value; }
}

public decimal Age
{
get { return age; }
set { age = value; }
}
}

 

   在这里我们创建了一个实体类叫student 里面包含3个属性 年龄,性别,姓名。 这里没什么说的只要知道有这么一个类在这里就可以了 呵呵 然后我们再来创建一个学校来装这些学生

[Serializable]
public class School
{
private List<Student> student_List = new List<Student>();
public School()
{ }
public School(List<Student> bk)
{
this.student_List = bk;
}

public List<Student> Student_List
{
get { return student_List; }
set { student_List = value; }
}
}

 这是一个学校 里面可以把学生都装进去 其实就是一个泛型的列表 然后把学生添加到列表中 当时注意这个类上面多了一个特性 Serializable ,它的用处就是标明下面这段代码可以被持久化到文件中。如果要序列化一个对象 就要加上这个特性。

private School GetSchool()
{
Student b1
= new Student("老大", "", 20);
Student b2
= new Student("老二", "", 10);
School bs
= new School();
bs.Student_List.Add(b1);
bs.Student_List.Add(b2);
return bs;
}

这段代码是向学校里面放入学生 不多说 看下面代码

protected void bt1_Click(object sender, EventArgs e)
{
XmlSerializer xs
= new XmlSerializer(typeof(School));
string path = Server.MapPath("Serializer") + @"\xmlPath.xml";
using (StreamWriter sw = new StreamWriter(path))
{
xs.Serialize(sw, GetSchool());
}

}

这就是 序列化的代码 在页面上放了一个按钮,实例化一个 XmlSerializer对象 指定一个可序列化对象的类型,然后我们建立了一个文件夹来保存xml文件,然后实例化一个StreamWriter 对象 设置保存路径 使用Serialize的方法将对象持久化到XML文件中Serialize方法有2个参数 第一个是用于写文档的流对象,第二个是要序列化的对象。 这样我们就把这个学校持久化到文件中了。然后怎么读取这个文件呢?

protected void bt2_Click(object sender, EventArgs e)
{
XmlSerializer xs
= new XmlSerializer(typeof(School));
string path = Server.MapPath("Serializer") + @"\xmlPath.xml";
FileStream fs
= null;
try
{

fs
= new FileStream(path, FileMode.Open, FileAccess.Read);
School BS
= (School)xs.Deserialize(fs);
if (BS.Student_List.Count > 0)
{
GridView1.DataSource
= BS.Student_List;
GridView1.DataBind();
fs.Dispose();
}

}
catch (IOException d)
{
throw (d);
}

}

这是第二个按钮 当点击之后 同样会实例化一个XmlSerializer类的对象获取保存xml文件的路线 创建一个文件流对象,设置文件流读取的路径,打开方式,访问文件的方式。使用Deserialize方法将这个流反序列化,然后类型转换问school,然后绑定前台的gridview 运行结果如下

 好了 这就是最简单的一个序列化与反序列化的过程 很简单 大家不要拍砖噢 呵呵 如果有不对的地方欢迎指正。