您的位置:首页 > 其它

对象的序列化和反序列化

2008-02-01 10:55 176 查看
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那个序列化的时候又不必加,哎...怪事.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: