.NET技术之美-流和序列化

应用场景

当程序关闭或对象或对象销毁时,这些对象中的数据需要被暂时的保存起来,一般用数据库来进行保存,如果在不便用数据库保存的情况下就可以用序列化对象的方式来进行存储

概念

序列化:将对象的状态保存起来(一般是将对象保存在文件中)

反序列化:将保存的信息从文件中取出来

途径

.NET框架提供了几种凡是:system.runtime.serialization.Iformat

.NET提供了两种实现这个借口的处理方法

1.BinaryFormat:将对象信息存储为二进制进行数据的保存

2.soapFormat:将对象序列化为可读的文本格式

BinaryFormat

BinaryFormat  binaryFormat=new BinaryFormat();
   Stream stram=File.OpenWriter(@"d:/people.obj");
   people p=new people(1){name="billy";age=12};
   binaryFormat.serialize(stream,p);
   stream.dispose();

同理反序列化实现的的关键代码

people p=(people)binary.Deserialize(stream,p);

xmlserializer

“XML 序列化是将对象的公共属性和字段转换为序列格式(这里是指 XML)以便存储或传输的过程。反序列化则是从 XML 输出中重新创建原始状态的对象。可以将序列化视为将对象的状态保存到流或缓冲区的方法”。需要注意的是,只有public的属性和字段才是可以被序列化的,如果设置的为internal或者private的属性或字段都是不能被序列化的。当然,要序列化的对象的类也必须是public的,否则会抛出下列的异常:

static void SaveToFile(String filePath, object obj)
        {
            Stream stream = null;
            try
            {
                stream = new FileStream(filePath, FileMode.Create, FileAccess.Write);
                XmlSerializer xmlserializer = new XmlSerializer(obj.GetType());
                xmlserializer.Serialize(stream, obj);
            }
            finally {
                if (stream != null)
                    stream.Close();
            }
        }

 

T LoadFromFile<T>(String filePath)
{
    FileStream fs = null;

    try
    {
        fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
        XmlSerializer xs = new XmlSerializer(typeof(T));

        return (T)xs.Deserialize(fs);
    }
    finally
    {
        if (fs != null)
        {
            fs.Close();
        }
    }
}
posted @ 2015-03-23 12:25  草旅虫  阅读(219)  评论(0编辑  收藏  举报