C#圣经读书笔记---CLR对象序列化(object serialization)
2010-05-20 23:37
387 查看
刚才看.net框架里面的自定义异常,发现里面用到了序列化,自己对于序列化有点模糊了,找本书看看(C#圣经呵呵);
使用对象序列化,可以持久化保存一个对象的状态到任何System.IO.Stream派生的类型中,或者从后者中获取对象的状态,当试图通过.NET远程处理层、XML Web服务或者WCF(不熟悉,关注Frank Xu Lei)这样的远程处理技术将一个对象复制到远程计算机时,具有对类型序列化的能力很关键。
序列化描述了持久化一个对象的状态到流的过程。被持久化的数据次序包括所有以后需要重建(反序列化)对象状态所必需的信息。假设对于一个窗体程序,需要保存用户的窗体偏好,可以定义UserPrefs来封装数据模块,可以对UserPrefs类标识[Serializable] 特性:
代码
使用对象序列化,可以持久化保存一个对象的状态到任何System.IO.Stream派生的类型中,或者从后者中获取对象的状态,当试图通过.NET远程处理层、XML Web服务或者WCF(不熟悉,关注Frank Xu Lei)这样的远程处理技术将一个对象复制到远程计算机时,具有对类型序列化的能力很关键。
序列化描述了持久化一个对象的状态到流的过程。被持久化的数据次序包括所有以后需要重建(反序列化)对象状态所必需的信息。假设对于一个窗体程序,需要保存用户的窗体偏好,可以定义UserPrefs来封装数据模块,可以对UserPrefs类标识[Serializable] 特性:
代码
namespace SerializableStudy { class Program { static void Main(string[] args) { JamesBondCar car = new JamesBondCar(); car.canFly = true; SaveAsBinaryFormat(car, "carBinaryData.dat"); LoadFromBinaryFormat("carBinaryData.dat"); SaveAsSoapFormat(car,"carSoapData.dat"); LoadFromSoapFormat("carSoapData.dat"); SaveAsXmlFormat(car,"carXmlData.dat"); LoadFromXmlFormat("carXmlData.dat"); } //binary序列化 static void SaveAsBinaryFormat(object objGraph, string fileName) { BinaryFormatter bf = new BinaryFormatter(); using(Stream fs=new FileStream (fileName,FileMode.Create,FileAccess.Write,FileShare.None)) { bf.Serialize(fs, objGraph); } Console.WriteLine("=>Saved car in binary format"); } //binary反序列化 static void LoadFromBinaryFormat(string fileName) { BinaryFormatter bf = new BinaryFormatter(); using(Stream fs=File.OpenRead(fileName)) { JamesBondCar car = (JamesBondCar)bf.Deserialize(fs); Console.WriteLine("Can Fly ? : {0}", car.canFly); } } //Soap 序列化 static void SaveAsSoapFormat(object objGraph, string fileName) { SoapFormatter sf = new SoapFormatter(); using (Stream fs = new FileStream (fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { sf.Serialize(fs, objGraph); } Console.WriteLine("=>Saved car in Soap format"); } //Soap反序列化 static void LoadFromSoapFormat(string fileName) { SoapFormatter sf = new SoapFormatter(); using (Stream fs = File.OpenRead(fileName)) { JamesBondCar car=(JamesBondCar) sf.Deserialize(fs); Console.WriteLine("Can Fly ? : {0}", car.canFly); } } //Xml序列化 static void SaveAsXmlFormat(object objGraph, string fileName) { XmlSerializer xs = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio),typeof(Car)}); using (Stream fs = new FileStream (fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { xs.Serialize(fs, objGraph); } Console.WriteLine("=>Saved car in XML format"); } //Xml反序列化 static void LoadFromXmlFormat(string fileName) { XmlSerializer xs = new XmlSerializer(typeof(JamesBondCar), new Type[] { typeof(Radio), typeof(Car) }); using (Stream fs = File.OpenRead(fileName)) { JamesBondCar car = (JamesBondCar)xs.Deserialize(fs); Console.WriteLine("Can Fly ? : {0}", car.canFly); } } } [Serializable] public class Radio { public bool hasTweeters; public bool hasSubWoofers; public double[] stationPresets; public string radioID = "XF-552RR6"; } [Serializable] public class Car { [NonSerialized] public Radio radio = new Radio(); public bool isHatchBack; } [Serializable] public class JamesBondCar : Car { public bool canFly; public bool canSubmerge; } }
相关文章推荐
- Python中使用pickle对内建类型(built in types)进行对象序列化(object serialization and deseirialzation)
- JHTP小结_第十五章_文件、流和对象序列化(Files, Streams, and Object Serialization)
- 对象序列化(Object Serialization)
- JHTP自测题_第十五章_文件、流和对象序列化(Files, Streams, and Object Serialization)
- Java对象序列化(Object Serialization)
- C++ / QT 对象序列化(Object Serialization)的实现
- Java源码——对象序列化(对象的存储及读取)(Object Serialization)
- Java 网络编程 之 传输对象 Serialization 序列化
- java语言编程IO流之对象序列化和ObjectInputStream与ObjectOutputStream
- 对象序列化之Boost.Serialization
- JSON继承SerializationBinder序列化与反序列化包含对象名
- 对象序列化ObjectOutputStream,ObjectInputStream
- bundle对象传送序列化serialization引用时问题
- Java学习资料-Java对象序列化ObjectOut(In)putStream
- 简述Xml.Serialization如何序列化对象到XML文件
- 业务实体对象(Business Entity Object)的序列化
- 【json】前台ajax序列化的多个属性拼接在一起的字符串,转化为JSONObject对象
- Flex 序列化自定义类 解决 sharedObject 保存自定义对象
- 如何将js的object对象传到后台--->JavaScript之对象序列化
- Hadoop Serialization -- hadoop序列化详解 (3)【ObjectWritable,集合Writable以及自定义的Writable】