Поделиться через


Сериализация

Сериализация — это процесс записи значений в структурах данных C (структуры, массивы и примитивные значения) в качестве XML-элемента. Десериализация — это обратный процесс.

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

Для сериализации используются следующие обратные вызовы:

Следующие перечисления используются с сериализацией:

Следующие функции используются с сериализацией:

Для сериализации используются следующие структуры: