Класс XmlTextWriter
- это объект, который знает XML. Вы можете использовать его для генерации произвольных XML-документов. Не имеет значения, откуда поступают данные; вы можете извлекать данные для элементов, атрибутов и содержимого XML вместе с фактической структурой документа XML из любого источника, который вам подходит, и ему не нужно сопоставлять структуру или данные какого-либо конкретного объекта.
С другой стороны, XmlSerializer
- это объект, который знает типы. Он имеет функции, необходимые для анализа типа, получения важной информации и записи этой информации. Это возможно, чтобы использовать a XmlTextWriter
объект для выполнения ввода/вывода; вы можете предоставить свой собственный или на каком-то уровне он всегда будет создавать аналогичный объект для обработки реального ввода-вывода. Другими словами, объект сериализатора действительно не знает XML как таковой, и ему это не нужно. Он делегирует эту работу другому объекту.
сайт Microsoft говорит, что XmlTextWriter
обеспечивает быстрый, без кэширования, вперед-единственным способом создания потоков, но я действительно не знаю, что это значит.
- «быстрый»: не замедлит
- «без кеширования»: важная информация не сохраняется в памяти дольше, чем это абсолютно необходимо
- «только вперед»: вы не можете вернуться к части документ XML, который вы уже создали
Это отличается от других методов генерации XML-документов, в которых вся структура документа хранится в памяти по мере ее создания и записывается в файл только после того, как весь документ имеет был co nstructed. Это часто описывается как «объектная модель документа» или DOM.
Подход писателя, как правило, более эффективен в производительности, поскольку XML-данные генерируются «на лету» по мере необходимости непосредственно из других структур данных в памяти, которые у вас уже есть. Поскольку подход DOM требует, чтобы данные и структура всего файла отображались в памяти сразу, он обычно использует больше памяти, что в некоторых случаях может снизить производительность (хотя, честно говоря, на современных компьютерах и типичных XML-документах это обычно полный не-вопрос).
XmlSerializer знает, как сериализовать объект в xml. XmlTextWriter знает, как писать xml в поток или файл. Две разные и несвязанные операции. –