如何在c#中使用XElement生成xml的对象列表

时间:2017-03-25 17:42:45

标签: c# xml

我正在尝试使用XElement将对象列表转换为xml。我的代码如下

 var employees = new List<Employee>();

 employees.Add(new Employee("1", " Ali","",1000));
 employees.Add(new Employee("2", "Billy","",1001));

 var xml = new XElement("root");
 xml.Add(new XElement("Employees"));

 foreach (var employee in employees)
  {
    xml.Add(new XElement("employee", employee.Name));
  };

我想要一个像这样的输出

<root>
 <Employees>
   <employee>Ali</employee>
   <employee>Billy</employee>
 </Employees>
</root>

但我得到的输出是

 <root>
 <Employees/>
   <employee>Ali</employee>
   <employee>Billy</employee>
</root>

我尝试在循环中移动Employees对象,如下所示,但这无济于事

 foreach (var employee in employees)
  {
    xml.Add(new XElement("Employees", new XElement("employee", employee.Name)));

  };

2 个答案:

答案 0 :(得分:2)

在你的循环中,你应该在你的员工元素而不是你的根上调用Add()

 var employees = new List<Employee>();

 employees.Add(new Employee("1", " Ali","",1000));
 employees.Add(new Employee("2", "Billy","",1001));

 var xml = new XElement("root");
 var employeesElement = new XElement("Employees");

 foreach (var employee in employees)
 {
    employeesElement.Add(new XElement("employee", employee.Name));
 }
 xml.Add(employeesElement);

答案 1 :(得分:2)

XElement构造函数可以处理IEnumerable,因此您可以在创建父employee时一次添加Employees个元素。实际上,可以立即创建整个XML:

var xml = new XElement("root",
    new XElement("Employees",
        employees.Select(e => new XElement("employee", e.Name))
    )
);