在工作流平台设计时,需要使用到类实例的序列化,在C#中可以很容易的实现。
一、首先引用几个命名空间
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
二、定义可序列化的类
[Serializable]
public class Student
{
private string name;
private string id;
private string studentNum;
private ArrayList scores;
/// <summary>
/// 姓名
/// </summary>
public string Name
{
get { return name; }
set { name = value; }
}
/// <summary>
/// 编号
/// </summary>
public string Id
{
get { return id; }
set { id = value; }
}
/// <summary>
/// 学号
/// </summary>
public string StudentNum
{
get { return studentNum; }
set { studentNum = value; }
}
/// <summary>
/// 成绩表
/// </summary>
public ArrayList Scores
{
get { return scores; }
set { scores = value; }
}
}
三、序列化到硬盘文件中
Student student = new Student();
student.Id = "002";
student.Name = "senty";
student.StudentNum = "090325";
ArrayList scores = new ArrayList();
scores.Add(90);
scores.Add(67);
scores.Add(89);
scores.Add(73);
student.Scores = scores;
#region 序列化对象
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("f:/student.dat", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, student);
stream.Close();
#endregion
四、从文件中反序列类实例
#region 反序列化
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("f:/student.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
Student student = formatter.Deserialize(stream) as Student;
this.label1.Text = "反序列化完成:";
this.label1.Text += "\r\n编号:" + student.Id;
this.label1.Text += "\r\n姓名:" + student.Name;
this.label1.Text += "\r\n学号:" + student.StudentNum;
this.label1.Text += "\r\n成绩:" + student.Scores[0] + "," + student.Scores[1] + "," + student.Scores[2] + "," + student.Scores[3] + ",";
#endregion
除了可以序列化类实例到文件中外,还可以保存到数据库中,至于如何保存Stream到数据库中,不在本文关注的范围,有兴趣可以自己百度一下。