Suppose I have an XML-serializable class called Song:

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

In order to save space (and also semi-obfuscate the XML file), I decide to rename the xml elements:

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

This will produce XML output like this:

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

I want to rename/remap the name of the class/object as well. Say, in the above example, I wish to rename the class Song to g. So that the resultant xml should look like this:

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

Is it possible to rename class-names via xml-attributes?

I don't wish to create/traverse the DOM manually, so I was wondering if it could be achieved via a decorator.

I'm actually serializing a list of Song objects in the XML.

Here's the serialization code:

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

And here's the XML output:

<?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>

                    
                    
                    
Edit
Report