XML Deserialization Issue with different XMLRoot Name



De-Serializing Class



[XmlRoot(ElementName = "sgr")]
public class SongGroup
{
public SongGroup()
{
this.Songs = new List<Song>();
}
[XmlElement(ElementName = "sgs")]
public List<Song> Songs { get; set; }
}

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


C# Code



static void Main(string[] args)
{
SongGroup songs = new SongGroup();
for(int i =0; i<5;i++)
{
Song song = new Song();
song.Artist = "Artist " + i;
song.SongTitle = "Title " + i;

songs.Songs.Add(song);
}
SaveSongs(songs);
}

public static bool SaveSongs(SongGroup songs)
{
XmlSerializer serializer = new XmlSerializer(typeof(SongGroup));
using (TextWriter textWriter = new StreamWriter("mysongxml.xml"))
{
serializer.Serialize(textWriter, songs);
}
//var xDocument = XDocument.Load("mysongxml2.xml"); // need to it working

var xDocument = XDocument.Load("mysongxml.xml"); //works fine

string xmlString = xDocument.ToString();

var serializer2 = new XmlSerializer(typeof(SongGroup));
var reader = new StringReader(xmlString);
var instance = (SongGroup)serializer2.Deserialize(reader);
return true;
}


mysongxml.xml



<?xml version="1.0" encoding="utf-8"?>
<sgr xmlns:xsi="http://ift.tt/ra1lAU" xmlns:xsd="http://ift.tt/tphNwY">
<sgs>
<a>Artist 0</a>
<s>Title 0</s>
</sgs>
<sgs>
<a>Artist 1</a>
<s>Title 1</s>
</sgs>
<sgs>
<a>Artist 2</a>
<s>Title 2</s>
</sgs>
<sgs>
<a>Artist 3</a>
<s>Title 3</s>
</sgs>
<sgs>
<a>Artist 4</a>
<s>Title 4</s>
</sgs>
</sgr>


mysongxml2.xml



<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSong xmlns:xsi="http://ift.tt/ra1lAU" xmlns:xsd="http://ift.tt/tphNwY">
<Song>
<Artist>Artist 0</Artist>
<SongTitle>Title 0</SongTitle>
</Song>
<Song>
<Artist>Artist 1</Artist>
<SongTitle>Title 1</SongTitle>
</Song>
<Song>
<Artist>Artist 2</Artist>
<SongTitle>Title 2</SongTitle>
</Song>
<Song>
<Artist>Artist 3</Artist>
<SongTitle>Title 3</SongTitle>
</Song>
<Song>
<Artist>Artist 4</Artist>
<SongTitle>Title 4</SongTitle>
</Song>
</ArrayOfSong>


My problem is that when the root name is sgr everything works fine but I need the same to get working with ArrayOfSong as well.


Thanks,


No comments:

Post a Comment