BinaryFormatter

作者:追风剑情 发布于:2019-3-14 12:58 分类:C#

FCL提供了两个格式化器:BinaryFormatter和SoapFormatter(在System.Runtime.Serialization.Formatters.Soap命名空间中定义,System.Runtime.Serialization.Formatters.Soap.dll程序集中)。

注意:从.NET Framework 3.5开始便废了SoapFormatter类,不要在生产代码中使用它。但在调试序列化代码时,它仍有一定用处,因为它能生成便于阅读的XML文件。要在生产代码中使用XML序列化和反序列化,请参见XmlSerializer和DataContractSerializer类。


示例一:将对象序列化为字节流

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);
        }
    }
}

运行测试
111.png


标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号