首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将XML转换为泛型列表

将XML转换为泛型列表
EN

Stack Overflow用户
提问于 2013-04-30 18:23:36
回答 3查看 33.2K关注 0票数 15

我正在尝试将XML转换为列表

代码语言:javascript
复制
<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尝试了几件事,但不太清楚该怎么做。

代码语言:javascript
复制
dox.Descendants("Student").Select(d=>d.Value).ToList();

我得到count 2,但是值类似于2dummy12 3dummy11

是否可以将上述XML转换为具有Id、Name和Section Properties的类型为Student的泛型列表?

我能实现这一点的最佳方式是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-30 18:26:49

您可以创建匿名类型

代码语言:javascript
复制
var studentLst=dox.Descendants("Student").Select(d=>
new{
    id=d.Element("Id").Value,
    Name=d.Element("Name").Value,
    Section=d.Element("Section").Value
   }).ToList();

这将创建一个匿名类型的列表。

如果您想创建一个学生类型列表

代码语言:javascript
复制
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();
票数 16
EN

Stack Overflow用户

发布于 2013-04-30 19:17:36

我知道你已经接受了答案。但我只想展示另一种我喜欢的方式。首先,您需要如下所示的类:

代码语言:javascript
复制
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:

代码语言:javascript
复制
string path = //path to xml file

using (StreamReader reader = new StreamReader(path))
{
    XmlSerializer serializer = new XmlSerializer(typeof(School));
    School school = (School)serializer.Deserialize(reader);
}

希望对您有所帮助。

票数 19
EN

Stack Overflow用户

发布于 2013-04-30 18:45:12

代码语言:javascript
复制
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();

或者,您可以创建一个名为Student的类,并将id、name和section作为属性,然后执行以下操作:

代码语言:javascript
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16297583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档