Angenommen, ich habe eine XML-serialisierbare Klasse namens Song :
[Serializable]
class Song
{
public string Artist;
public string SongTitle;
}
Um Platz zu sparen (und auch die XML-Datei halb zu verschleiern ), entscheide ich mich, die XML-Elemente umzubenennen:
[XmlRoot("g")]
class Song
{
[XmlElement("a")]
public string Artist;
[XmlElement("s")]
public string SongTitle;
}
Dadurch wird eine XML-Ausgabe wie folgt erzeugt:
<Song>
<a>Britney Spears</a>
<s>I Did It Again</s>
</Song>
Ich möchte auch den Namen der Klasse / des Objekts umbenennen / neu zuordnen. Angenommen, im obigen Beispiel möchte ich die Klasse Song in g umbenennen . Damit die resultierende XML folgendermaßen aussehen sollte:
<g>
<a>Britney Spears</a>
<s>I Did It Again</s>
</g>
Ist es möglich, Klassennamen über XML-Attribute umzubenennen ?
Ich möchte das DOM nicht manuell erstellen / durchlaufen, daher habe ich mich gefragt, ob dies über einen Dekorateur erreicht werden kann.
Danke im Voraus!
UPDATE: Ups! Diesmal habe ich es wirklich wieder getan! Ich habe vergessen zu erwähnen - ich serialisiere tatsächlich eine Liste von Song-Objekten im XML.
Hier ist der Serialisierungscode:
public static bool SaveSongs(List<Song> songs)
{
XmlSerializer serializer = new XmlSerializer(typeof(List<Song>));
using (TextWriter textWriter = new StreamWriter("filename"))
{
serializer.Serialize(textWriter, songs);
}
}
Und hier ist die XML-Ausgabe:
<?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>
Anscheinend benennt das XmlRoot () -Attribut das Objekt in einem Listenkontext nicht um.
Vermisse ich etwas