FCL提供了两个格式化器:BinaryFormatter和SoapFormatter(在System.Runtime.Serialization.Formatters.Soap命名空间中定义,System.Runtime.Serialization.Formatters.Soap.dll程序集中)。
示例一:将对象序列化为字节流
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
namespace SerializeTest
{
class Program
{
static void Main(string[] args)
{
// 创建对象图以便把它们序列化到流中
var objectGraph = new List<String> { "Jeff", "Kristin", "Aidan", "Grant" };
Stream stream = SerializeToMemory(objectGraph);
stream.Position = 0;
objectGraph = null;
objectGraph = (List<String>) DeserializeFromMemory(stream);
foreach (var s in objectGraph) Console.WriteLine(s);
Console.Read();
}
// 将对象序列化到内存流
private static MemoryStream SerializeToMemory(Object objectGraph)
{
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
//第一个参数: 可以是从System.IO.Stream抽象基类派生的任何类型对象
//(MemoryStream、FileStream、NetworkStream)
//第二个参数:可以是任何东西。例如Int32、String、DateTime、
//Exception、List<String>、Dictionary<Int32, DateTime>等
formatter.Serialize(stream, objectGraph);
return stream;
}
// 反序列化
private static Object DeserializeFromMemory(Stream stream)
{
BinaryFormatter formatter = new BinaryFormatter();
return formatter.Deserialize(stream);
}
}
}