XMLWriter vs XMLDictionaryWriter

В чем разница между XMLWriter и 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. См. Также здесь.

Надеюсь, что это поможет.