Сериализация: изменение имени корневого узла без изменения имени класса - PullRequest
3 голосов
/ 01 сентября 2010

Цель

Взять класс с именем "Item" и вывести его сериализованный XML как:

<Template><!--some properties --></Template>

Проблема

Корневой узел является производным от имени класса, который реализует IXmlSerializable.

    // By the time I get here 'writer' already has a root node
    public void WriteXml(XmlWriter writer)
    {
        writer.WriteStartElement("Template");
         // write out the properties
        writer.WriteEndElement();
    }

Так что я получаю XML, который выглядит как

<Item><Template><!-- some properties --></Template></Item>

Вопрос

Есть ли атрибут, свойство, которое я могу переопределить, или что-нибудь еще, чтобы получить желаемый эффект (кроме изменения имени класса)?

Спасибо!

Разрешение благодаря Фредерику!

Так как на мой вопрос к ответу @Frederik Gheysels ответ на этот вопрос был своего рода, я решил поставить его здесь, чтобы его не похоронили.

Просто добавьте атрибут XmlRoot в ваш класс, и это изменит выходной xml корневого узла.

Пример: * 1 034 *

[XmlRoot("Template")]
public class Item : IXmlSerializable
{
   //Item's properties
}

1 Ответ

6 голосов
/ 01 сентября 2010

проверьте класс XmlRootAttribute .

...