您的位置:首页 > 其它

三种序列化的方法以及反序列化

2011-02-08 11:26 387 查看
class xuliehua
{

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");
int count;
//从程序外部获取byte数组
byte[] byteArray = getByteData();
char[] charArray;
UnicodeEncoding uniEncoding = new UnicodeEncoding();
//创建MemoryStream内存流类的实例
MemoryStream memStream = new MemoryStream(byteArray);
count = 0;
//显示内存流类实例的属性
Console.WriteLine(
"容量:{0}/t数量:{1}/t当前位置:{2}",
memStream.Capacity.ToString(),
memStream.Length.ToString(),
memStream.Position.ToString());
memStream.Seek(0, SeekOrigin.Begin);//将当前位置指定为流开始处
byteArray = new byte[memStream.Length];
count = memStream.Read(byteArray, 0, 20);//从流中读取前20个字节
while (count < memStream.Length)//逐个读取剩下的字节
{
byteArray[count++] = Convert.ToByte(memStream.ReadByte());
}
//将字节数组转换为字符数组并显示出来
charArray = new char[uniEncoding.GetCharCount(byteArray, 0, count)];
uniEncoding.GetChars(byteArray, 0, count, charArray, 0);
Console.WriteLine(charArray);
Console.ReadLine();

}
private static byte[] getByteData()//获取外部字节数组的方法
{
UnicodeEncoding uniEncoding = new UnicodeEncoding();
byte[] result = uniEncoding.GetBytes("memStream示例测试字符串");
return result;
}
//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;
}
特别要注意,其中,FileStream  和,MemoryStream
  ^_^。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: