Предположим, что у меня есть XML-сериализуемый класс Песня:
[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>
Я хочу переименовать/переназначить имя класса/объекта. Скажем, в приведенном выше примере я хочу переименовать класс Песня в g. Чтобы получившийся xml выглядел так:
<g>
<a>Britney Spears</a>
<s>I Did It Again</s>
</g>
Можно ли переименовать имена классов через xml-attributes?
Я не хочу создавать/перемещать 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() не переименовывает объект в контексте списка.
Я что-то пропустил?