序列化
序列化是在 C 数据结构中编写值的过程, (结构、数组和基元值) 作为 XML 元素。 反序列化是反向过程。
序列化是在 C 数据结构中编写值的过程, (结构、数组和基元值) 作为 XML 元素。 反序列化是反向过程。
这两个进程都依赖于 C 数据结构和 XML 之间的映射说明。
若要序列化值,应用程序调用 WsWriteElement、 WsWriteAttribute 或 WsWriteType。
若要反序列化值,应用程序调用 WsReadElement、 WsReadAttribute 或 WsReadType。
安全
XML 读取器 用于反序列化过程。 请参阅 XML 读取器中与 XML 相关的安全信息的安全部分。
反序列化程序继续反序列化数据,直到它已完成读取正在反序列化的元素。 反序列化过程在遇到不符合反序列化数据说明的任何 XML 文档时失败。 此时,正在使用的 XML 读取器将变为无效,并返回错误。
默认情况下,反序列化是严格的。 导致反序列化失败的某些条件包括但不限于:
- 缺少预期元素
- 所需元素之间出现意外的元素字段
- 必需字段后的额外元素内容,除非 WS_STRUCT_IGNORE_TRAILING_ELEMENT_CONTENT
- 除非指定 了WS_STRUCT_IGNORE_UNHANDLED_ATTRIBUTES 标志,否则出现意外属性
- 非指定范围的意外数据类型值
- 重复元素计数已脱离指定范围
序列化大量数据可能会导致内存分配过多,并可能导致拒绝服务攻击。 反序列化数据的用户必须指定堆对象来分配数据,并且用户可以使用堆分配限制来防止内存分配攻击。
数据类型的范围支持,包括字符串的最大长度、数组中的 max 元素计数等。允许用户控制不同数据类型的最大大小。 用户可以指定数据说明或架构中的范围,以限制不同数据的最大大小。
(文本、二进制、MTOM) 支持包含嵌入零的字符串值。 使用嵌入零反序列化字符串时,用户应使用计数字符串 (WS_STRING) ,因此零不会混淆字符串长度的计算。 如果包含嵌入零的字符串值反序列化为需要零终止字符串的字段,则返回错误,反序列化失败。 如果使用 wsutil 生成数据说明,则应使用 /string:WS_STRING 选项,前提是需要嵌入零的字符串。
以下回调用于序列化:
以下枚举用于序列化:
以下函数用于序列化:
以下结构用于序列化:
- WS_ATTRIBUTE_DESCRIPTION
- WS_BOOL_DESCRIPTION
- WS_BYTES_DESCRIPTION
- WS_BYTE_ARRAY_DESCRIPTION
- WS_CHAR_ARRAY_DESCRIPTION
- WS_CUSTOM_TYPE_DESCRIPTION
- WS_DATETIME_DESCRIPTION
- WS_DECIMAL_DESCRIPTION
- WS_DEFAULT_VALUE
- WS_DOUBLE_DESCRIPTION
- WS_DURATION_DESCRIPTION
- WS_ELEMENT_DESCRIPTION
- WS_ENDPOINT_ADDRESS_DESCRIPTION
- WS_ENUM_DESCRIPTION
- WS_ENUM_VALUE
- WS_FAULT_DESCRIPTION
- WS_FIELD_DESCRIPTION
- WS_FLOAT_DESCRIPTION
- WS_GUID_DESCRIPTION
- WS_INT16_DESCRIPTION
- WS_INT32_DESCRIPTION
- WS_INT64_DESCRIPTION
- WS_INT8_DESCRIPTION
- WS_ITEM_RANGE
- WS_STRING_DESCRIPTION
- WS_STRUCT_DESCRIPTION
- WS_TIMESPAN_DESCRIPTION
- WS_UINT16_DESCRIPTION
- WS_UINT32_DESCRIPTION
- WS_UINT64_DESCRIPTION
- WS_UINT8_DESCRIPTION
- WS_UNION_DESCRIPTION
- WS_UNION_FIELD_DESCRIPTION
- WS_UNIQUE_ID_DESCRIPTION
- WS_UTF8_ARRAY_DESCRIPTION
- WS_VOID_DESCRIPTION
- WS_WSZ_DESCRIPTION
- WS_XML_QNAME_DESCRIPTION
- WS_XML_STRING_DESCRIPTION