XElement и список<T>
-
13-09-2019 - |
Вопрос
У меня есть класс, который имеет следующие свойства:
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 = ""
});
Теперь я пытаюсь использовать Linq to XML, чтобы сгенерировать XML, представляющий мой список авторов.
new XElement("Authors",
new XElement("Author",
from na in this.Authors
select new XElement("First", na.First)))
Блок выше не генерирует 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 выглядеть так, как мне нужно!
Решение
Вам необходимо пройти IEnumerable<XElement>
запрос в качестве второго параметра, а не строки «Автор», например:
// 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