在做项目中,因为有一个要把项目数据导出到非明文的文件中作备份使用。
在对比多种方法之后,发现用序列化实现是代码量最少,速度也很快。
在分享方法之前先了解一下序列化:
序列化是将一个对象转换成字节流以达到将其长期保存在内存、数据库或文件中的处理过程。它的主要目的是保存对象的状态以便以后需要的时候使用。与其相反的过程叫做反序列化。
序列化的类型
• 二进制(流)序列化
• SOAP序列化
• XML序列化
因为项目中只用到二进制流序列化,所以简单介绍一下怎么用。其他序列化可以自行百度。
首先。要想把一个对象序列化,那个对象前面必须加[Serializable]类特性,表示该类可被序列化,
该类的所以类成员都会被序列化,如果不想某些类成员被序列化,那么在类成员加[NonSerializable]
特性即可
想使用二进制序列化必须引用System.Runtime.Serialization.Formatters.Binary命名空间
下面是具体操作:
- 封装一个存储数据的类对象,
[Serializable] //可序列化
public class Binaryout
{
private string Fixed_Assets_Code { get; set; }
private string Capital_assets_Code { get; set; }
private string Class_Code { get; set; }
private string Place_Code { get; set; }
private string Department_Code { get; set; }
private string Procurement_Date { get; set; }
private string Manufacture { get; set; } }
然后给每个类成员加上get 和set方法
- 给类对象的成员添加数据
List<Binaryout> lb = new List<Binaryout>(); for (int i = 0; i < dataGridViewX8.RowCount; i++) { Binaryout by = new Binaryout(); by.setFixed_Assets_Code(dataGridViewX8.Rows[i].Cells["Fixed_Assets_Code"].Value.ToString()); by.setCapital_assets_Code(dataGridViewX8.Rows[i].Cells["Capital_assets_Code_G"].Value.ToString()); by.setClass_Code(dataGridViewX8.Rows[i].Cells["Class_Code_G"].Value.ToString()); by.setPlace_Code(dataGridViewX8.Rows[i].Cells["Place_Code_G"].Value.ToString()); by.setDepartment_Code(dataGridViewX8.Rows[i].Cells["Department_Code_G"].Value.ToString()); by.setProcurement_Date(dataGridViewX8.Rows[i].Cells["Procurement_Date"].Value.ToString()); by.setManufacture(dataGridViewX8.Rows[i].Cells["Manufacture"].Value.ToString()); lb.Add(by); }
- 序列化类对象
string fileName= " C:\Users\Administrator\Desktop
\固定资产数据备份(Binary)" + DateTime.Now.ToString(“yyyyMMddHHmmss”)+ “.bas”;
FileStream fs = null;
try
{
fs = File.Create(ss);//创建
BinaryFormatter bf = new BinaryFormatter(); //二进制序列化
bf.Serialize(fs, lb);
fs.Close();
MessageBox.Show(“导出成功!文件名称为:”+ fileName);
}
catch
{
MessageBox.Show(“导出失败!”);
}
二进制序列化是实例化BinaryFormatter类,Serialize方法是序列化,参数1是要序列化的目标流,参数2是序列化对象。
上面操作就可以将对象进行序列化了,但是由于项目需求是非明文,总所周知,编码一般对数字不会进行编码,
所以我们在对上面类对象添加数据的时候,可以对数据进行加密处理,等下面拿出来在解码显示。这样就实现了导出非明文文件。
下面是项目中导出的非明文文件,把文件后缀名改为txt文件,显示如下图
虽然项目中有很多数字信息,但是加密过后已经完全看不出内容了。