Как я могу переименовать имена классов с помощью атрибутов Xml?

Предположим, у меня есть XML-сериализуемый класс с именем Song :

[Serializable]
class Song
{
    public string Artist;
    public string SongTitle;
}

Для экономии места (а также ] полу-запутать XML-файл), я решаю переименовать элементы xml:

[XmlRoot("g")]
class Song
{
    [XmlElement("a")]
    public string Artist;
    [XmlElement("s")]
    public string SongTitle;
}

Это даст XML-вывод, подобный этому:

<Song>
  <a>Britney Spears</a>
  <s>I Did It Again</s>
</Song>

Я также хочу переименовать / переназначить имя класса / объекта. Скажем, в приведенном выше примере я хочу переименовать класс Song в g . Таким образом, результирующий xml должен выглядеть следующим образом:

<g>
  <a>Britney Spears</a>
  <s>I Did It Again</s>
</g>

Можно ли переименовать имена классов через атрибуты xml ?

Я не хочу создавать / обходить DOM вручную, поэтому мне было интересно, можно ли этого добиться с помощью декоратора.

Заранее спасибо!

ОБНОВЛЕНИЕ: Упс! На этот раз я действительно сделал это снова! Забыл упомянуть - я на самом деле сериализую список объектов Song в XML.

Вот код сериализации:

    public static bool SaveSongs(List<Song> songs)
    {
            XmlSerializer serializer = new XmlSerializer(typeof(List<Song>));
            using (TextWriter textWriter = new StreamWriter("filename"))
            {
                serializer.Serialize(textWriter, songs);
            }
    }

А вот вывод XML:

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSong>
<Song>
  <a>Britney Spears</a>
  <s>Oops! I Did It Again</s>
</Song>
<Song>
  <a>Rihanna</a>
  <s>A Girl Like Me</s>
</Song>
</ArrayOfSong>

По-видимому, XmlRoot () атрибут не переименовывает объект в контексте списка.

Я что-то упустил?

63
задан ThinkingStiff 26 February 2013 в 21:36
поделиться