C# 序列化[Serializable]
--首先来段网络上的例子,地址:http://www.cnblogs.com/firstyi/archive/2008/03/18/1111800.html
实际工作中遇到的问题:
需要将数据存储成单独的文件,这个单独的文件,需要在任何地方都可以用的到。比如说,存储一系列表格,其中有 double,string , bool等数据类型
double数据类型在中国所用到的小数点是“.” ,而在瑞典用到的小数点是逗号“,”,如果将所有数据都保存为文本形式的话,不仅仅在写入的时候格式麻烦,而且
在不同的国家还不通用。
解决的方法思路:
可以直接保存各个数据的数据类型。这就要求用到序列化和反序列化的知识。(这个例子很简单,只是自己第一次用到。写下来加深印象)
[Serializable] class channeltable { public string Name; public double Frequency; public string Subchannel; public string powerTx; public bool wide_band; public bool subchannel_lock; } private void SerializeNow(string path,List<channeltable> channeltable) { FileStream fileStream = new FileStream(path, FileMode.CreateNew); BinaryFormatter b = new BinaryFormatter(); b.Serialize(fileStream, channeltable); fileStream.Close(); } private void DeSerializeNow(string path, ref List<channeltable> channeltable) { FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); BinaryFormatter b = new BinaryFormatter(); channeltable = b.Deserialize(fileStream) as List<channeltable>; fileStream.Close(); }
当用序列化的方法保存后,得到的文件,是连续的乱码。不能从保存的文件直接看出来,里面的具体数据。这样可以保证数据不被胡乱篡改。
需要反序列化后,才能得到我们要的对象。
例子中序列化的是一个channeltable 集合对象,反序列化后得到的同样是这样一个对象。避免了“,”和“.”的使用,所造成的转换SystemFormatException