2016-04-27 4 views
1

Я использовал XmlSerializer, когда я наткнулся на кого-то, используя XmlTextWriter.Разница между XmlTextWriter и XmlSerializer?

В чем разница между этими двумя?

Для меня они выполняют ту же функцию, что и для создания XML-файлов. Сайт Microsoft сказал, что XmlTextWriter обеспечивает быстрый, не кэшированный, прямой способ генерации потоков, но я действительно не знаю, что это значит.

+1

XmlSerializer знает, как сериализовать объект в xml. XmlTextWriter знает, как писать xml в поток или файл. Две разные и несвязанные операции. –

ответ

3

Класс XmlTextWriter - это объект, который знает XML. Вы можете использовать его для генерации произвольных XML-документов. Не имеет значения, откуда поступают данные; вы можете извлекать данные для элементов, атрибутов и содержимого XML вместе с фактической структурой документа XML из любого источника, который вам подходит, и ему не нужно сопоставлять структуру или данные какого-либо конкретного объекта.

С другой стороны, XmlSerializer - это объект, который знает типы. Он имеет функции, необходимые для анализа типа, получения важной информации и записи этой информации. Это возможно, чтобы использовать a XmlTextWriter объект для выполнения ввода/вывода; вы можете предоставить свой собственный или на каком-то уровне он всегда будет создавать аналогичный объект для обработки реального ввода-вывода. Другими словами, объект сериализатора действительно не знает XML как таковой, и ему это не нужно. Он делегирует эту работу другому объекту.

сайт Microsoft говорит, что XmlTextWriter обеспечивает быстрый, без кэширования, вперед-единственным способом создания потоков, но я действительно не знаю, что это значит.

  • «быстрый»: не замедлит
  • «без кеширования»: важная информация не сохраняется в памяти дольше, чем это абсолютно необходимо
  • «только вперед»: вы не можете вернуться к части документ XML, который вы уже создали

Это отличается от других методов генерации XML-документов, в которых вся структура документа хранится в памяти по мере ее создания и записывается в файл только после того, как весь документ имеет был co nstructed. Это часто описывается как «объектная модель документа» или DOM.

Подход писателя, как правило, более эффективен в производительности, поскольку XML-данные генерируются «на лету» по мере необходимости непосредственно из других структур данных в памяти, которые у вас уже есть. Поскольку подход DOM требует, чтобы данные и структура всего файла отображались в памяти сразу, он обычно использует больше памяти, что в некоторых случаях может снизить производительность (хотя, честно говоря, на современных компьютерах и типичных XML-документах это обычно полный не-вопрос).

+0

, так что я могу использовать XmlTextWriter для создания xml-файла. Поскольку это только пересылка, я не смогу загрузить файл xml в текстовое поле и переписать значение? – user2521723

+0

_ «Поскольку это только пересылка, я не смогу загрузить XML-файл в текстовое поле и переписать значение?» _ - да и нет. Вы всегда можете перезагрузить XML, например, 'XmlTextReader'. И вы можете переписать значение, но вам придется переписать весь файл сразу. В самом деле, это именно то, что «XmlSerializer» будет делать, если вы десериализуете объект из файла, отобразите значения объекта в текстовом поле и затем снова сериализуете объект в файл.Просто «XmlSerializer» работает на уровне объекта, поэтому вам не нужно беспокоиться о деталях реализации XML. –

+0

ОК, поэтому, если я правильно понимаю это, если я использую XmlSerializer, я могу выбрать значение определенного узла для перезаписи, но если я использую XmlTextWriter, я не могу просто перезаписать определенное значение, но должен перезаписать весь файл, если захочу изменить одно значение? – user2521723

Смежные вопросы