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类。


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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Runtime.Serialization.Formatters.Binary;
  7.  
  8. namespace SerializeTest
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. // 创建对象图以便把它们序列化到流中
  15. var objectGraph = new List<String> { "Jeff", "Kristin", "Aidan", "Grant" };
  16. Stream stream = SerializeToMemory(objectGraph);
  17.  
  18. stream.Position = 0;
  19. objectGraph = null;
  20.  
  21. objectGraph = (List<String>) DeserializeFromMemory(stream);
  22. foreach (var s in objectGraph) Console.WriteLine(s);
  23.  
  24. Console.Read();
  25. }
  26.  
  27. // 将对象序列化到内存流
  28. private static MemoryStream SerializeToMemory(Object objectGraph)
  29. {
  30. MemoryStream stream = new MemoryStream();
  31. BinaryFormatter formatter = new BinaryFormatter();
  32. //第一个参数: 可以是从System.IO.Stream抽象基类派生的任何类型对象
  33. //(MemoryStream、FileStream、NetworkStream)
  34. //第二个参数:可以是任何东西。例如Int32、String、DateTime、
  35. //Exception、List<String>、Dictionary<Int32, DateTime>等
  36. formatter.Serialize(stream, objectGraph);
  37. return stream;
  38. }
  39.  
  40. // 反序列化
  41. private static Object DeserializeFromMemory(Stream stream)
  42. {
  43. BinaryFormatter formatter = new BinaryFormatter();
  44. return formatter.Deserialize(stream);
  45. }
  46. }
  47. }

运行测试
111.png


标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号