日期:2014-05-17 浏览次数:21288 次
?
/**
*
* 该测试程序使用了C#的序列化进行了整个对象的序列化操作
* 学生记录类StudentRecord 使用了list泛型类进行学生对象的存储,然后把该类
* 进行序列化。每次需要查找数据时,又对文件中的数据进行反序列化,再进行相关操作
*/
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace studentRecord
{
class Program
{
static void Main(string[] args)
{
Student s1 = new Student();
s1.id = "20081120029";
s1.name = "哈桑";
s1.major = "文学";
s1.phone = "12345678";
s1.sex = "男";
s1.email = "zhyq0826@gmail.com";
Student s2 = new Student();
s2.id = "20081120030";
s2.name = "阿米尔";
s2.major = "文学";
s2.phone = "1234567889";
s2.sex = "男";
s2.email = "zhyq0826@gmail.com";
string path = "record.dat";
StudentRecord sr = new StudentRecord();
Console.WriteLine("开始添加学生\n{0}", s1.ToString());
Console.WriteLine("开始添加学生\n{0}", s2.ToString());
sr.Add(s1, path); //写入学生信息
sr.Add(s2, path);
Console.WriteLine("学生添加完毕");
Console.WriteLine("-------------------------------");
Console.WriteLine("开始查找学号为20081120029的学生");
Student s = sr.Search("20081120029", path);
Console.WriteLine("查找到的该生信息为\n{0}", s.ToString());
Console.WriteLine("-------------------------------");
Console.WriteLine("开始更新20081120029的学生信息");
s.major = "数学";
s.email = "zhyq0826@qq.com";
sr.Update(s, path); //更新完毕
s = sr.Search("20081120029", path);
Console.WriteLine("更新完毕后20081120029的学生信息为\n{0}", s.ToString());
Console.WriteLine("-------------------------------");
Console.WriteLine("删除学生20081120029的信息\n");
sr.Delete("20081120029", path);
List<Student> list = sr.GetAll(path);
Console.WriteLine("删除后的数据为\n");
foreach (Student sn in list)
{
Console.WriteLine("{0}", sn.ToString());
}
if (File.Exists(path)) //程序退出之前删除学生信息值,方便测试程序
{
File.Delete(path);
}
Console.ReadKey();
}
}
[Serializable] //标志文件可以进行序列化
class Student {
public string email { set; get; }
public string name { set; get; }
public string id { set; get; }
public string sex { set; get; }
public string birth { set; get; }
public string phone { set; get; }
public string major { set; get; }
public override string ToString()
{
return "学号:" + this.id + ",\n" + "名字:" + this.name + ",\n" + "性别:" + this.sex + ",\n" + "出生年月:" + this.birth + ",\n" + "专业:" + this.major + ",\n" + "联系电话:" + this.phone + ",\n" + "email:" + this.email + ",\n";
}
}
class StudentRecord
{
private IFormatter formatter;
private Stream stream;
private List<Student> list;
public StudentRecord()
{
formatter = new BinaryFormatter();
}
public List<Student> GetAll(string path)
{
OpenFileForRead(path);
return list;
}
public void Add(Student st,string path)
{
OpenFileForRead(path);
if (list == null)
{
list = new List<Student>();
list.Add(st);
OpenFileForWrite(path); //打开文件进行写入
return;
}else {
list.Add(st);
OpenFileForWrite(path); //打开文件进行写入
return;
}
}
public void Update(Student st,string path)