Предположим, у меня есть 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 () атрибут не переименовывает объект в контексте списка.
Я что-то упустил?