【C# 序列化】开端


定义

序列化是使用指定格式将活动对象或对象图转换为字节序列的过程,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保
存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。

对象图objectGfraph, 一个对象可以引用一个集合,而这个集合引用了一组对象,这些对象可以继续引用其他对象 ,这就形成了对象图。调用格式化器的Serialize方法时,对象图中的所有对象都被序列化到流中。

格式化器算法会确保每个对象只序列化一次。避免相互引用造成的死循环。

可以指定的格式有几十种,但最常见的两种格式是可扩展标记语言(XML)和JavaScript对象表示法(JSON)。

更优方案:JSON更紧凑,最适合Web和移动应用程序。 XML较为冗长,但在更多旧系统中得到更好的支持。 使用JSON可以最小化序列化对象图的大小。 将对象图发送到Web应用程序和移动应用程序时,JSON也是一个不错的选择,因为JSON是JavaScript的本机序列化格式,并且移动应用程序通常会在有限的带宽上进行调用,因此字节数很重要。

.NET Core具有多个类,这些类将在XML和JSON之间进行序列化。 我们将从查看XmlSerializer和JsonSerializer开始。

 类型以及命名空间

system [serializeable]、[Noserializeable]

 system.Runtime.serialization

[OnDeserialized]、[OnDeserializing]、[OnSerialized]、[OnSerializing]

[OptionalFiled]:指定序列化流中可能缺少某个字段,以便BinaryFormatter和SoapFormatter不会抛出异常。应用到新版本类型的新增加的字段上,当序列化格式化器看到该特性的应用与一个字段时,就不会因为流中的数据不包含这个字段而抛出异常。

序列化的工作原理

序列化的用途 JSON 序列化 二进制和 XML 序列化 序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保 存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。 下图展示了序列化的整个过程: 将对象序列化为带有数据的流。 该流还可能包含有关对象类型的信息,例如其版本、区域性和程序集名称。 可以 将此流中的对象存储在数据库、文件或内存中。

xue'lie'h

 序列化的用途

通过序列化,开发人员可以保存活动对象的状态,并能在需要时重新创建对象,同时还能存储对象和交换数据。 通过 序列化,开发人员可以执行如下操作: 使用 Web 服务将对象发送到远程应用程序 将对象从一个域传递到另一个域 将对象通过防火墙传递为 JSON 或 XML 字符串 跨应用程序维护安全或用户特定的信息

引用类型、struct、枚举、委托。枚举和委托是一定可以序列化的所有不用[serializeable]标记

Object、List、HashTable、数组

继承性

[serializeable] 不会遗传到子类,如果子类标记为[serializeable],那么基类也必须标记[serializeable]。因为子类保护了父类。

公开性

序列化会将所有的数据都保存成二进制,包含阔private、readonly等。因此敏感的数据例如账号密码等字段应该设置成不可序列化[Noserializeable]。

序列化控制

可以使用:[Noserializeable]、[Noserializeable]、[OptionalField]、[OnDeserializing]、[OnSerialized]、[OnSerializing]特性对序列化进行部分控制。

.....................

本章更多内容请查阅:

序列化器

序列化必须要使用到序列化器,它用于完成将数据转化为特定格式的数据。以下列举2种格式化器:
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter已经过时,由于它存在着巨大的安全隐患,已经停止使用。 以二进制的格式对对象进行序列化和反序列操作。
System.Runtime.Serialization.Formatters.Soap.SoapFormatter 已经建议使用。 以SOAP的格式对对象进行序列化和反序列化操作,从.NET Framework2.0开始,该类就废弃。
System.Runtime.Serialization.NetDataContractSerializer 用.NET Framework提供的类型,将类型实例序列化和返序列化为XML流或文档结构。
System.Runtime.Serialization.DataContractSerializer 使用指定的数据协定,将类型实例序列化和反序列化XML流或文档结构
System.Xml.Serialization.XmlSerializer 将类型的实例序列化和反序列化XML文档,该类允许控制如何将对象编码为XML文档。

System.Text.Json.Serialization:Json已经成主流,是.net core 内置。System.Text.Json 中不支持 System.Runtime.Serialization 命名空间中的特性。



C