Сериализация
Сериализация — это процесс записи значений в структурах данных 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