序列化

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

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

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

显示序列化和反序列化如何依赖于 C 数据结构和 XML 之间的映射的说明的关系图。

为了序列化值,应用程序调用 WsWriteElementWsWriteAttributeWsWriteType

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

安全性

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

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

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

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

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

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

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

以下回调用于序列化:

以下枚举用于序列化:

以下函数用于序列化:

以下结构用于序列化: