C# 元素和列表

C# 元素和列表,c#,.net,linq-to-xml,xelement,C#,.net,Linq To Xml,Xelement,我有一个具有以下属性的类: public class Author { public string FirstName { get; set; } public string LastName { get; set; } } 接下来,我有一个这样的作者列表: List<Author> authors = new List<Author> (); authors.add( new Author { FirstName = "Steven",

我有一个具有以下属性的类:

public class Author {
  public string FirstName { get; set; }
  public string LastName { get; set; }
}
接下来,我有一个这样的作者列表:

List<Author> authors = new List<Author> ();

authors.add(
  new Author { 
    FirstName = "Steven",
    LastName = "King"
  });

authors.add(
  new Author { 
    FirstName = "Homer",
    LastName = ""
  });
上面的块并没有像我期望的那样生成XML。我得到的是:

<Authors>
  <Author>
    <First>Steven</First>
    <First>Homer</First>
  </Author>
<Authors>
我希望XML输出是这样的:

<Authors>
  <Author>
    <First>Steven</First>
    <Last>King</Last>
  </Author>
  <Author>
    <First>Homer</First>
    <Last></Last>
  </Author>
</Authors>
如果您能帮助我使XML看起来像我所需要的那样,我将不胜感激

您需要将查询作为第二个参数传递,而不是作者字符串,如下所示:

// Note the new way to initialize collections in C# 3.0.
List<Author> authors = new List<Author> ()
{
  new Author { FirstName = "Steven", LastName = "King" }),
  new Author { FirstName = "Homer", LastName = "" })
};

// The XML
XElement xml = new XElement("Authors",
    from na in this.Authors
    select new XElement("Author",
        new XElement("First", na.FirstName),
        new XElement("Last", na.LastName)));

这将给出你需要的结果。

我知道你正在使用C,但这是你应该认真考虑将VB.NET项目添加到解决方案中的一次。XML文本非常适合这一点,并使其更容易实现

要从作者列表中获取XML,请执行以下操作:

Function GetAuthorsXML(authors As List(Of Author)) As XElement
    Return <Authors>
               <%= from a in authors _
                   select <Author>
                              <First><%= a.FirstName %></First>
                              <Last><%= a.LastName %></Last>
                          </Author> %>
           </Authors>
End Function

拥有一个完全独立的项目,只是为了一点点XML魔力,充其量也太过分了。除非需要进行大量的XML转换,而且转换的性质更为复杂,否则添加另一个程序集,除非您想编译成模块,然后将它们编织在一起,这是另一个PITA,它只是在许多方面增加了太多的开销。当然,如果这是唯一的一点,那就太多了。但是对于C开发人员来说,知道.NET中存在这种情况仍然很有价值。我从来没有在一个没有几个小项目的系统上工作过,所以添加一个来处理XML魔术对我来说是有意义的。
Function GetAuthorsXML(authors As List(Of Author)) As XElement
    Return <Authors>
               <%= from a in authors _
                   select <Author>
                              <First><%= a.FirstName %></First>
                              <Last><%= a.LastName %></Last>
                          </Author> %>
           </Authors>
End Function