关于序列化的笔记

来源:互联网 发布:建筑电气常用数据手册 编辑:程序博客网 时间:2024/05/17 06:03

对象序列化是将对象(比如Person对象)转换为二进制数据
反序列化是将二进制数据还原为对象。
对象是稍纵即逝的,不仅程序重启、操作系统重启会造成对象的消失,就是退出函数范围等都可能造成对象的消失,序列化/反序列化就是为了保持对象的持久化。就像用DV录像(序列化)和用播放器播放(反序列化)一样。


BinaryFormatter类有两个方法:
void Serialize(Stream stream, object graph)  对象graph序列化到stream中

object Deserialize(Stream stream)            将对象从stream中反序列化,返回值为反序列化得到的对象


序列化:

BinaryForatter bf = new BinaryForatter();

using(Stream stream = File.OpenWrite(@"C:\1.dat"))

{

bf.Serialize(stream, obj);

}


反序列化

using(Stream stream = File.OpenRead(@“C:\1.dat”))

{

object obj = bf.Deserialize(stream);

}



不是所有对象都能序列化,只有可序列化的对象才能序列化,在类声明上添加[Serializable],对象的属性、字段的类型也必须可序列化。
反序列的项目中必须有同样的类,否则不能反序列化。


序列化的应用:
         ASP.Net、ViewState、WCF、.Net Remoting、ASP.Net Cache 、集群等。

扩展阅读:
(1)http://www.yaosansi.com/post/1061.html  
(2)http://blog.sina.com.cn/s/blog_645752e60100h4w9.html


(面试题)深度拷贝。浅层拷贝。先手写浅层拷贝、深层拷贝的代码,理解了概念再谈用MemberwiseClone 、DeepCopy。见备注
写代码拷贝,实现ICloneable方法,内部调用MemberwiseClone  
参考资料http://www.cnblogs.com/liping13599168/archive/2007/07/28/834242.html 
         static object DeepCopy(object src)
        {
            BinaryFormatter Formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
            using (MemoryStream stream = new MemoryStream())
            {
                Formatter.Serialize(stream, src);
                stream.Position = 0;
                return Formatter.Deserialize(stream);
            }
        }
原创粉丝点击