XMLWriter против XMLDictionaryWriter - PullRequest
       25

XMLWriter против XMLDictionaryWriter

16 голосов
/ 31 августа 2010

В чем разница между XMLWriter и XMLDictionaryWriter? В каких случаях обычно используется каждый из них?

Ответы [ 2 ]

18 голосов
/ 22 сентября 2010

XmlWriter является абстрактным классом, XmlDictionaryWriter является одним из классов, который наследует его, и сам является абстрактным классом.

Я беру удар в темноте, который вы хотите использовать с DataContractSerializer или с де / сериализацией в целом. XmlDictionaryWriter - это базовый класс, используемый WCF для его де-сериализации.

Из этого я могу сделать вывод, что в XmlDictionaryWriter должна быть некоторая настройка производительности, чтобы сделать ее более производительной с задачами де-сериализации WCF. Фактически, если вы вызовете методы 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();
}
7 голосов
/ 22 сентября 2010

XmlWriter - это абстрактный класс, используемый для написания документов XML только для пересылки. Вы используете статический метод Create для создания конкретных реализаций класса для использования. Этот метод создания документов XML полезен, когда вам нужно быстро создать произвольный XML для любого использования.

XmlDictionaryWriter - это абстрактный класс, используемый для сериализации и десериализации объектов в и из XML. Насколько я понимаю, он используется в WCF для сериализации объектов для перемещения по проводу. XmlDictionaryWriter может сериализоваться с использованием двоичного, текстового или MTOM форматов. Я ожидаю, что вы будете использовать этот класс только в том случае, если вам конкретно нужна пользовательская (де) сериализация для использования поверх WCF. Смотри также здесь .

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

...