Ale*_*lex 19 c# xml xml-deserialization
我试图将XML文件反序列化为几个类对象:艺术家,专辑和歌曲
这是当前的设置:
static void Main(string[] args)
{
var riseAgainst = DeSerializer(CreateElement());
Console.WriteLine(string.Format("Band: {0}",riseAgainst.Name));
Console.WriteLine("-----------------------------");
Console.WriteLine(string.Format("Album: {0}",riseAgainst.Album.Name));
Console.WriteLine("-----------------------------");
Console.WriteLine("Song List:\r");
foreach(var s in riseAgainst.Album.Songs)
{
Console.WriteLine(string.Format("Song: {0}", s));
}
Console.ReadLine();
}
static XElement CreateElement()
{
return new XElement("Artist",
new XElement("Name", "Rise Against"),
new XElement("Album",
new XElement("Name", "Appeal to Reason"),
new XElement("Songs",
new XElement("Song", "Hero of War"),
new XElement("Song", "Savior"))
)
);
}
static Artist DeSerializer(XElement element)
{
var serializer = new XmlSerializer(typeof(Artist));
return (Artist)serializer.Deserialize(element.CreateReader());
}
}
public class Artist
{
public string Name { get; set; }
public Albums Album { get; set; }
}
public class Albums
{
public string Name { get; set; }
public Songs Songs { get; set; }
}
public class Songs
{
public string Song { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我目前遇到的问题是,如果有多个艺术家,专辑和/或歌曲,那么它只会填充第一个.我怎样才能让它为所有专辑或艺术家的所有歌曲填充...等等我尝试将它们设置为数组,但它没有用.提前致谢.
mar*_*rto 23
我修改了你的课程,所以现在艺术家有一个List<Album>和专辑有List<Songs>
我必须稍微修改生成的xml,以确保它正确填充类.这是代码
static void Main(string[] args)
{
var riseAgainst = DeSerializer(CreateElement());
Console.WriteLine(string.Format("Band: {0}",riseAgainst.Name));
Console.WriteLine("-----------------------------");
Console.WriteLine(string.Format("Album: {0}",riseAgainst.Albums.First().Name));
Console.WriteLine("-----------------------------");
Console.WriteLine("Song List:\r");
foreach(var s in riseAgainst.Albums.First().Songs)
{
Console.WriteLine(string.Format("Song: {0}", s.Name));
}
Console.ReadLine();
static XElement CreateElement()
{
return new XElement("Artist",
new XElement("Name", "Rise Against"),
new XElement("Albums",
new XElement("Album",
new XElement("Name", "Appeal to Reason"),
new XElement("Songs",
new XElement("Song", new XElement("Name", "Hero of War")),
new XElement("Song", new XElement("Name", "Savior")))
))
);
}
static Artist DeSerializer(XElement element)
{
var serializer = new XmlSerializer(typeof(Artist));
return (Artist)serializer.Deserialize(element.CreateReader());
}
}
public class Artist
{
public string Name { get; set; }
public List<Album> Albums { get; set; }
}
public class Album
{
public string Name { get; set; }
public List<Song> Songs { get; set; }
}
public class Song
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.这不包括您想要多个艺术家的情况.
| 归档时间: |
|
| 查看次数: |
23498 次 |
| 最近记录: |