XElement e List
-
13-09-2019 - |
Pergunta
Eu tenho uma classe que tem as seguintes propriedades:
public class Author {
public string FirstName { get; set; }
public string LastName { get; set; }
}
Em seguida, eu tenho uma lista de autores como assim:
List<Author> authors = new List<Author> ();
authors.add(
new Author {
FirstName = "Steven",
LastName = "King"
});
authors.add(
new Author {
FirstName = "Homer",
LastName = ""
});
Agora, eu estou tentando usar Linq para XML, a fim de gerar o XML representando meus autores de lista.
new XElement("Authors",
new XElement("Author",
from na in this.Authors
select new XElement("First", na.First)))
O bloco acima não gera o XML como eu esperava que. O que eu recebo é:
<Authors>
<Author>
<First>Steven</First>
<First>Homer</First>
</Author>
<Authors>
O que eu quero a saída XML para olhar como é:
<Authors>
<Author>
<First>Steven</First>
<Last>King</Last>
</Author>
<Author>
<First>Homer</First>
<Last></Last>
</Author>
</Authors>
Qualquer ajuda sobre como obter o XML para olhar como eu preciso que ele seria imensamente apreciada!
Solução
Você precisa passar o href="http://msdn.microsoft.com/en-us/library/9eekhta0.aspx" rel="noreferrer"> IEnumerable<XElement>
consulta como o segundo parâmetro, não o "Autor" string, assim:
// 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)));
Isso lhe dará o resultado que você precisa.
Outras dicas
Eu sei que você está usando C #, mas este é um momento em que você deve considerar seriamente a adição de um projeto VB.NET para a sua solução. Literais XML são perfeitos para isso e torná-lo muito mais fácil.
Para obter o XML da sua lista de Autor, você faria isso:
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