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

posted @ 2013-11-22 22:24  侠梦千年  阅读(504)  评论(0编辑  收藏  举报