序列化 (Visual Basic)

序列化是将对象转换为字节流以存储对象或将其传输到内存、数据库或文件的过程。 其主要目的是保存对象的状态,以便在需要时重新创建它。 反向进程称为反序列化。

序列化的工作原理

此图显示了序列化的整个过程。

序列化图形

对象序列化为流,该流不仅包含数据,还包含有关对象类型的信息,例如其版本、区域性和程序集名称。 在该流中,它可以存储在数据库、文件或内存中。

序列化的用途

序列化允许开发人员保存对象的状态,并根据需要重新创建它,从而提供对象的存储和数据交换。 通过序列化,开发人员可以执行操作,例如通过 Web 服务将对象发送到远程应用程序、将对象从一个域传递到另一个域、将对象作为 XML 字符串通过防火墙传递,或者跨应用程序维护安全性或用户特定的信息。

JSON 序列化

命名空间 System.Text.Json 包含 JavaScript 对象表示法(JSON)序列化和反序列化的类。 JSON 是一种开放标准,通常用于跨 Web 共享数据。

JSON 序列化将对象的公共属性序列化为符合 RFC 8259 JSON 规范的字符串、字节数组或流。 若要控制序列化或反序列化类实例的方式 JsonSerializer ,可以使用以下一种或多种方法:

二进制和 XML 序列化

命名空间 System.Runtime.Serialization 包含二进制和 XML 序列化和反序列化的类。

在二进制序列化中,所有成员(即使是只读成员)都已序列化,并且性能得到增强。 XML 序列化提供更具可读性的代码,以及实现互作性目的的对象共享和用法的更大灵活性。

警告

使用 BinaryFormatter 的二进制序列化可能很危险。 有关详细信息,请参阅 BinaryFormatter 安全指南BinaryFormatter 迁移指南

使对象可序列化

若要使用二进制或 XML 序列化序列化对象,需要对象进行序列化、包含序列化对象的流和一个 FormatterSystem.Runtime.Serialization 包含序列化和反序列化对象所需的类。

SerializableAttribute 属性应用于类型,以指示可以序列化此类型的实例。 SerializationException如果尝试序列化但类型没有SerializableAttribute属性,则会引发异常。

如果不希望类中的字段可序列化,请应用该 NonSerializedAttribute 属性。 如果可序列化类型的字段包含指针、句柄或其他特定于特定环境的其他数据结构,并且不能在其他环境中有意义地重新构造该字段,则可能需要使其不可序列化。

如果序列化类包含对标记 SerializableAttribute的其他类对象的引用,则这些对象也将进行序列化。

二进制序列化

二进制序列化使用二进制编码来生成压缩序列化,以用于存储或基于套接字的网络流。

XML 序列化

XML 序列化将对象的公共字段和属性(或参数和方法的返回值)序列化为符合特定 XML 架构定义语言 (XSD) 文档的 XML 流。 XML 序列化生成已转换成 XML 的强类型类,其中包含公共属性和字段。 System.Xml.Serialization 包含序列化和反序列化 XML 所需的类。

可以将属性应用于类和类成员,以控制 XmlSerializer 序列化或反序列化类实例的过程。

基本和自定义序列化

可以通过两种方式(基本和自定义)执行二进制和 XML 序列化。 基本序列化使用 .NET 自动序列化对象。

基本序列化的唯一要求是对象被应用了SerializableAttribute属性。 NonSerializedAttribute可用于防止序列化特定字段。

使用基本序列化时,对象的版本控制可能会产生问题,在这种情况下,自定义序列化可能更好。 基本序列化是执行序列化的最简单方法,但它不会对进程进行太多控制。

在自定义序列化中,可以准确指定将序列化哪些对象以及如何对其进行序列化。 类必须标记 SerializableAttribute 并实现 ISerializable 接口。 如果还希望以自定义方式反序列化对象,则必须使用自定义构造函数。

设计器序列化

设计器序列化是一种特殊的序列化形式,涉及通常与开发工具关联的对象持久性类型。 设计器序列化是将对象图转换为源文件的过程,稍后可用于恢复对象图。 源文件可以包含代码、标记甚至 SQL 表信息。

相关文章

如何:从 XML 文件读取对象数据(Visual Basic)
演示如何读取以前使用 XmlSerializer 类写入 XML 文件的对象数据。

如何:将对象数据写入 XML 文件(Visual Basic)
演示如何使用 XmlSerializer 类将对象从类写入 XML 文件。