三种序列化的方法以及反序列化
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
^_^。
{
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
^_^。
相关文章推荐
- Android中传递对象的三种方法以及Java对象的序列化和反序列化实践
- 各类数据的序列化以及反序列化的方法(与Java服务器通讯)
- Json 序列化以及反序列化的三种方式(二)
- .Net提供的三种序列化和反序列化方法
- PHP多种序列化/反序列化的方法
- 序列化和反序列化方法
- 栋哥带你学Java缓冲流、Properties集合、序列化流以及反序列化流
- 关于各种输入输出流的二次理解总结 ,以及输入的三种方法总结。
- PHP多种序列化/反序列化的方法
- 什么序列化反序列化以及自定义类型归档什么的,一点个人看法
- php多种序列化、反序列化的方法
- ASP.NET中把对象序列化成JSON字符串的三种方法
- 深入C中常用的三种排序方法总结以及探讨分析
- PHP多种序列化/反序列化的方法
- 用三种方式序列化和反序列化用户名和密码数据
- java序列化和反序列化以及serialVersionUID的作用
- 三种定义JavaScript函数方法以及使用匿名函数打造自己的类库
- 简析Geoserver中获取图层列表以及各图层描述信息的三种方法
- PHP多种序列化/反序列化的方法
- 详解PHP序列化反序列化的方法