我正在尝试将XML转换为List
<School>
<Student>
<Id>2</Id>
<Name>dummy</Name>
<Section>12</Section>
</Student>
<Student>
<Id>3</Id>
<Name>dummy</Name>
<Section>11</Section>
</Student>
</School>
我尝试使用LINQ做了一些事情,并且在进行中并不是那么清楚。
dox.Descendants("Student").Select(d=>d.Value).ToList();
得到计数2,但值类似于2dummy12 3dummy11
是否可以将上述XML转换为具有Id,Name和Section Properties的Student类型的通用List?
我可以实现这个的最佳方式是什么?
答案 0 :(得分:14)
我看到你已经接受了答案。但我只想展示另一种我喜欢的方式。首先,您需要以下课程:
public class Student
{
[XmlElement("Id")]
public int StudentID { get; set; }
[XmlElement("Name")]
public string StudentName { get; set; }
[XmlElement("Section")]
public int Section { get; set; }
}
[XmlRoot("School")]
public class School
{
[XmlElement("Student", typeof(Student))]
public List<Student> StudentList { get; set; }
}
然后你可以反序列化这个xml:
string path = //path to xml file
using (StreamReader reader = new StreamReader(path))
{
XmlSerializer serializer = new XmlSerializer(typeof(School));
School school = (School)serializer.Deserialize(reader);
}
希望它会有所帮助。
答案 1 :(得分:11)
您可以创建匿名类型
var studentLst=dox.Descendants("Student").Select(d=>
new{
id=d.Element("Id").Value,
Name=d.Element("Name").Value,
Section=d.Element("Section").Value
}).ToList();
这会创建一个匿名类型列表..
如果要创建学生类型列表
class Student{public int id;public string name,string section}
List<Student> studentLst=dox.Descendants("Student").Select(d=>
new Student{
id=d.Element("Id").Value,
name=d.Element("Name").Value,
section=d.Element("Section").Value
}).ToList();
答案 2 :(得分:1)
var students = from student in dox.Descendants("Student")
select new
{
id=d.Element("Id").Value,
Name=d.Element("Name").Value,
Section=d.Element("Section").Value
}).ToList();
或者您可以创建一个类ID,名称和部分作为属性的类调用学生,并执行:
var students = from student in dox.Descendants("Student")
select new Student
{
id=d.Element("Id").Value,
Name=d.Element("Name").Value,
Section=d.Element("Section").Value
}).ToList();