Сериализация
Сериализация — это процесс записи значений в структурах данных 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
- Непредвиденное значение типа данных, которое выходит за пределы указанного диапазона
- Число повторяющихся элементов выходит за пределы указанного диапазона
Сериализация большого объема данных может привести к чрезмерному выделению памяти и атаке типа "отказ в обслуживании". Пользователь, который десериализирует данные, должен указать объект кучи для выделения данных, и пользователь может использовать ограничение выделения кучи, чтобы предотвратить атаку на выделение памяти.
Поддержка диапазонов для типов данных, включая максимальную длину для строки, максимальное число элементов в массиве и т. д. позволяет пользователю управлять максимальным размером для различных типов данных. Пользователь может указать диапазон в описании данных или схеме, чтобы ограничить максимальный размер различных данных.
Строковое значение, содержащее внедренное ноль, поддерживается в форматах провода (text, binary, 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