序列化与反序列化简介:
序列化指将对象转换为字节流的过程, 与之相反的便是反序列化, 即将字节流转换为对象的过程.
.NET 支持的几种对象序列化方式:
二进制序列化: 对象序列化之后是二进制形式的, 通过 BinaryFormatter 类来实现的, 这个类位于 System.Runtime.Serialization.Formatters.Binary 命名空间下.
SOAP 序列化: 对象序列化之后的结果符合 SOAP 协议, 也就是可以通过 SOAP 协议传输, 通过 System.Runtime.Serialization.Formatters.Soap 命名空间下的 SoapFormatter 类来实现的.
XML 序列化: 对象序列化之后的结果是 XML 形式的, 通过 XmlSerializer 类来实现的, 这个类位于 System.Xml.Serialization 命名空间下. XML 序列化不能序列化私有数据.
其他方式:
Json 序列化: 在. net 中使用 JSON, 使用 JSON.NET, 通过序列化将. net 对象转换为 JSON 字符串; JSON.NET 的 LINQ to JSON,LINQ to JSON 也可以根据需求的格式来定制 json 数据.
Protobuf 序列化: 在. net 中使用 protobuf-net, 最大的特点是基于二进制, 因此比传统的 XML 表示高效短小得多. 除了比 Json,XML 有速度上的优势和使用上的方便外, protocolbuf 还可以做到向前兼容和向后兼容.
几种方式的区别:
二进制格式和 SOAP 格式可序列化一个类型的所有可序列化字段, 不管它是公共字段还是私有字段. XML 格式仅能序列化公共字段或拥有公共属性的私有字段, 未通过属性公开的私有字段将被忽略.
使用二进制格式序列化时, 它不仅是将对象的字段数据进行持久化, 也持久化每个类型的完全限定名称和定义程序集的完整名称 (包括包称, 版本, 公钥标记, 区域性), 这些数据使得在进行二进制格式反序列化时亦会进行类型检查. SOAP 格式序列化通过使用 XML 命名空间来持久化原始程序集信息. 而 XML 格式序列化不会保存完整的类型名称或程序集信息. 这便利 XML 数据表现形式更有终端开放性.
用 protobuf 序列化后的大小是 json 的 10 分之一, xml 格式的 20 分之一, 是二进制序列化的 10 分之一 (极端情况下, 会大于等于直接序列化),
- Binary
- Soap
- XML
- Json
- Protobuf
- REF
- C# 高级编程, C# 脚本编程
- https://www.cnblogs.com/yzenet/p/3622833.html
- C# 笔记 --7. 序列化与反序列化
来源: http://www.bubuko.com/infodetail-2648541.html