В чем разница между XMLWriter
и XMLDictionaryWriter
? В каких случаях каждый из них обычно используется?
XMLWriter vs XMLDictionaryWriter
Ответ 1
XmlWriter
- абстрактный класс, из которого XmlDictionaryWriter
является одним из классов, который наследует от него и сам является абстрактным классом.
Я принимаю удар в темноте, который вы хотите использовать с DataContractSerializer
или с де-сериализацией в целом. XmlDictionaryWriter
- это базовый класс, используемый WCF для выполнения де-сериализации.
Из этого я бы сделал вывод, что в XmlDictionaryWriter
должна быть некоторая настройка производительности, чтобы сделать ее более эффективной с задачами WCF de/serialization. Фактически, если вы вызываете WriteObject(Stream, object)
вместо WriteObject(XmlWriter, object)
или WriteObject(XmlDictionaryWriter, object)
, он создаст XmlDictionaryWriter
для вас
public virtual void WriteObject(Stream stream, object graph)
{
CheckNull(stream, "stream");
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(stream, Encoding.UTF8, false);
this.WriteObject(writer, graph);
writer.Flush();
}
Ответ 2
XmlWriter - это абстрактный класс, используемый для написания документов XML в прямом режиме. Вы используете статический метод Create
для создания конкретных реализаций класса для использования. Этот метод создания XML-документов полезен, когда вам нужно быстро создать произвольный XML для любого использования.
XmlDictionaryWriter - абстрактный класс, используемый для сериализации и десериализации объектов в XML и из него. Из того, что я понимаю, он используется в WCF для сериализации объектов для перемещения по проводу. XmlDictionaryWriter
может сериализоваться с использованием двоичных, текстовых или MTOM-форматов. Я бы ожидал, что вы будете использовать этот класс только в том случае, если вам понадобится обычная сериализация (de) для использования по WCF. См. Также здесь.
Надеюсь, что это поможет.