您的位置:首页 > 移动开发 > Objective-C

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] 特性:

代码

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