序列化
序列化是在 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 标志
- 出乎指定范围的意外数据类型值
- 重复元素的计数已脱离指定范围
序列化大量数据可能会导致过多的内存分配,并可能导致拒绝服务攻击。 反序列化数据的用户必须指定堆对象来分配数据,并且用户可以使用堆分配限制来防止内存分配攻击。
对数据类型的范围支持,包括字符串的最大长度、数组中的最大元素计数等。允许用户控制不同数据类型的最大大小。 用户可以在数据说明或架构中指定范围,以限制不同数据的最大大小。
文本、二进制、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