序列化

序列化是在 C 数据结构中编写值的过程, (结构、数组和基元值) 作为 XML 元素。 反序列化是反向过程。

序列化是在 C 数据结构中编写值的过程, (结构、数组和基元值) 作为 XML 元素。 反序列化是反向过程。

这两个进程都依赖于 C 数据结构和 XML 之间的映射说明。

Diagram showing how serialization and deserialization rely on a description of the mapping between the C data structures and the XML.

若要序列化值,应用程序调用 WsWriteElementWsWriteAttributeWsWriteType

若要反序列化值,应用程序调用 WsReadElementWsReadAttributeWsReadType

安全

XML 读取器 用于反序列化过程。 请参阅 XML 读取器中与 XML 相关的安全信息的安全部分。

反序列化程序继续反序列化数据,直到它已完成读取正在反序列化的元素。 反序列化过程在遇到不符合反序列化数据说明的任何 XML 文档时失败。 此时,正在使用的 XML 读取器将变为无效,并返回错误。

默认情况下,反序列化是严格的。 导致反序列化失败的某些条件包括但不限于:

  • 缺少预期元素
  • 所需元素之间出现意外的元素字段
  • 必需字段后的额外元素内容,除非 WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
  • 除非指定 了WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES 标志,否则出现意外属性
  • 非指定范围的意外数据类型值
  • 重复元素计数已脱离指定范围

序列化大量数据可能会导致内存分配过多,并可能导致拒绝服务攻击。 反序列化数据的用户必须指定堆对象来分配数据,并且用户可以使用堆分配限制来防止内存分配攻击。

数据类型的范围支持,包括字符串的最大长度、数组中的 max 元素计数等。允许用户控制不同数据类型的最大大小。 用户可以指定数据说明或架构中的范围,以限制不同数据的最大大小。

(文本、二进制、MTOM) 支持包含嵌入零的字符串值。 使用嵌入零反序列化字符串时,用户应使用计数字符串 (WS_STRING) ,因此零不会混淆字符串长度的计算。 如果包含嵌入零的字符串值反序列化为需要零终止字符串的字段,则返回错误,反序列化失败。 如果使用 wsutil 生成数据说明,则应使用 /string:WS_STRING 选项,前提是需要嵌入零的字符串。

以下回调用于序列化:

以下枚举用于序列化:

以下函数用于序列化:

以下结构用于序列化: