如何使用 linq to xml 将列表保存在对象内?
Posted
技术标签:
【中文标题】如何使用 linq to xml 将列表保存在对象内?【英文标题】:how to save the List inside the object using linq to xml? 【发布时间】:2020-01-08 19:41:38 【问题描述】:我正在尝试在 XDocument 中保存带有嵌套列表的对象列表。那么如何实现呢?
我有一堂课:
public class Book
public string Id get;
public string Title get; set;
public string Isbn get; set;
public List<string> Authors get; set;
public int Pages get; set;
...
还有一个类来存储它:
public class FileBookStore : IEntryStore<Book>
private List<Book> loadedBooks;
private string filename;
...
private static async Task<IEnumerable<Book>> ReadDataAsync(string filename)
...
IEnumerable<Book> result = XDocument.Parse(text)
.Root
.Elements("book")
.Select(e =>
new Book
Title = e.Attribute("title").Value,
Isbn = e.Attribute("isbn").Value,
Authors = new List<string>() //and here
);
return result;
static async Task SaveDataAsync(string filename, IEnumerable<Book> books)
XDocument root = new XDocument(
new XElement("catalog",
books.Select(n =>
new XElement("book",
new XAttribute("title", n.Title ?? ""),
new XAttribute("isbn", n.Isbn ?? ""),
//stuck in a line below
new XElement("authors", books.Select(n => new XElement("author"), new XAttribute("name"))),
new XAttribute("pages", n.Pages),
new XAttribute("year", n.Year),
new XAttribute("publisher", n.Publisher ?? "")))));
using (StreamWriter writer = new StreamWriter(filename))
await writer.WriteAsync(root.ToString()).ConfigureAwait(false);
我对这部分完全感兴趣。如何在集合中保存和加载对象?
【问题讨论】:
【参考方案1】:改变你坚持的路线:
//stuck in a line below
new XElement("authors", n.Authors.Select(x => new XElement("author", new XAttribute("name",x)))),
【讨论】:
以上是关于如何使用 linq to xml 将列表保存在对象内?的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中使用 LINQ-To-XML 解析具有多个列表和类对象的 XML 数据
c# LINQ-to-XML 更新(保存)排序后文件中的元素列表