using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization.Formatters.Soap; //需要添加这个dll否则无法找到这个命名空间
using System.Xml.Serialization;
using System.IO;
namespace SerializingExample
{
class Program
{
static void Main(string[] args)
{
#region 变量声明
//Remoting序列化有3种方式 二进制,soap,xml
SerializeObject so = new SerializeObject();
so.name = "需要序列化的对象的一个字段内容";
#endregion
#region 二进制序列化
IFormatter binaryformatter = new BinaryFormatter(); //命名空间 using System.Runtime.Serialization.Formatters.Binary;
FileStream binarystream = new FileStream(@"d:\temp\SerializeObject.bin", FileMode.Create); //二进制的格式后缀可以是dll
binaryformatter.Serialize(binarystream, so);
binarystream.Close(); //需要关闭流
// 二进制反序列化
//以流方式打开要反序列化的文件
FileStream binarystreamDe = new FileStream(@"d:\temp\SerializeObject.bin", FileMode.Open);
//重要的一点是反序列化后得到一个Object对象,需要你来显式转换成序列化前的类型,等于得到一个类型实例
SerializeObject BinaryDeserializeObject = binaryformatter.Deserialize(binarystreamDe) as SerializeObject;
//操作得到的类型实例
Console.WriteLine("反序列化二进制方式:" + BinaryDeserializeObject.name);
#endregion
#region SOAP序列化
//序列化
IFormatter soapformatter = new SoapFormatter();
FileStream soapstream = new FileStream(@"d:\temp\SerializeObject.soap", FileMode.Create);
soapformatter.Serialize(soapstream, so);
soapstream.Close();
//反序列化
FileStream soapstreamDe = new FileStream(@"d:\temp\SerializeObject.soap", FileMode.Open);
SerializeObject SoapDeserializeObject = soapformatter.Deserialize(soapstreamDe) as SerializeObject;
Console.WriteLine("反序列化SOAP方式:" + SoapDeserializeObject.name);
#endregion
#region XML序列化
//序列化
XmlSerializer xmlformatter = new XmlSerializer(typeof(SerializeObject));
FileStream xmlstream = new FileStream(@"d:\temp\SerializeObject.xml", FileMode.Create);
xmlformatter.Serialize(xmlstream, so);
xmlstream.Close();
//反序列化
FileStream xmlstreamDe = new FileStream(@"d:\temp\SerializeObject.xml", FileMode.Open);
SerializeObject XmlDeserializeObject = xmlformatter.Deserialize(xmlstreamDe) as SerializeObject;
Console.WriteLine("反序列化XML方式:" + XmlDeserializeObject.name);
#endregion
Console.ReadLine();
}
}
[Serializable]
public class SerializeObject
{
public string name;
public void show(string str)
{
Console.WriteLine(str);
}
}
}