首先需要用到序列化和反序列化
1、创建一个被标记为[Serializable]的类A(注意!此类不能写在窗体文件中需要另外新建类否则会造成打不开窗体文件的设计器但运行时不会影响窗体的加载可以正常运行只是不方便对窗体上的控件操作了)。[Serializable]表 示此类可被序列化,创建后在类A中声明对应的变量/字段。
创建一个类A的list泛型数组B。
[Serializable] class wenjian{
public List<Users> B; //存数组的类B
public wenjian (List<A> B) //此类中的A类型list数组
{ Userse = userse; }
}
//存变量的类A
[Serializable] class A{ public string a= null, b= null, c= null, d= null; public char e; public Image f;
public A(string a1, char b1, string c1, string d1, string e1, Image f1) {
a= a1; b= b1; c= c1; d= d1; e= e1; f= f1; } }
2、把需要保存到文件的程序中能识别的值(变量/字段)传值赋值到A对应的变量中。
在主文件中new出类A的实例对象,并将此对象添加到数组B中。
A s= new A(a1,b1,c1,d1,e1,f1); B.Add(s);//实例化对象时把值设置给对象的字段,然后保存到数组中
3、创建文件流并把序列化的数据写入文件
B wj = new B(主文件中的A类型list数组名); //实例化对象时把主文件中的数组传到序列化的类中并赋值给序列化类中的同类型数组
BinaryFormatter bf= new BinaryFormatter();//利用序列化将对象保存到文件中
FileStream fs = new FileStream(@sdlg.FileName+".bin",FileMode.OpenOrCreate,FileAccess.Write,FileShare.None);
xuLieHua.Serialize(fs,bf);//序列化
fs.Close();
4、读取数据反序列化
BinaryFormatter bf = new BinaryFormatter();//利用反序列化将文件中的数据恢复为对象
FileStream fs = new FileStream(odlg.FileName, FileMode.Open, FileAccess.Read, FileShare.None);
B wj = (B)bf.Deserialize(fs);//反序列化
fs.Close();
主文件中的A类型list数组名 = wj.B;//将反序列化出来的对象信息赋值给对应的变量
网友评论