对象的序列化和反序列化

2007年11月27日 星期二 下午 05:45

今天突然看到这个话题.找了下资料,个人理解如下:

对象序列化:把一个对象存为文件,格式不定.

反序列化:把文件还原成一个对象.

序列化方法:

public static void SerializeObject(string fileName, object obj)
        {
            BinaryFormatter serialize = new BinaryFormatter();

            Stream st = new FileStream(fileName, FileMode.Create);

            serialize.Serialize(st, obj);
            st.Close();

}

反序列化方法:

public static object DeSerializeObject(string fileName, Type type)
        {
            Stream fs = File.Open(fileName, FileMode.Open);// File.OpenRead(fileName);
            BinaryFormatter deserializer = new BinaryFormatter();
            object obj= deserializer.Deserialize(fs);//反序列化得到的对象  
            fs.Close();
            return obj;
}

这两个方法都是通过把对象存为二进制数据,再转出来,这种情况下,直接打开文件是乱码的.

我看到还有一种:

序列化:

            Stream writer = null;
            try
            {
                Type type = obj.GetType();
                XmlSerializer serializer = new XmlSerializer(type);

                writer = new FileStream(fileName, FileMode.Create);
                serializer.Serialize(writer, obj);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (writer != null)
                    writer.Close();
            }

反序列化:

            if (!File.Exists(fileName))
                return null;

            FileStream fs = null;
            try
            {
                fs = new FileStream(fileName, FileMode.Open);

                XmlSerializer xSer = new XmlSerializer(type);
                XmlReader reader = new XmlTextReader(fs);
                return xSer.Deserialize(reader);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {

                if (fs != null)
                {
                    fs.Close();
                }
            }

这种就不是存的二进制了,可以直接打开文件并查看数据,现在还不知道用那一种好,

关于序列化的好处,也尚未理解透彻~~

补充,被序列化的类,在类前面要加[Serializable()],表示它是可以被序列化的,不然会抛导异常,不过当用XML那个序列化的时候又不必加,哎...怪事.

posted @ 2008-02-01 10:55  point.deng  阅读(246)  评论(0编辑  收藏  举报