将列表转换为数组并将其存储到文件系统中[关闭]

Posted

技术标签:

【中文标题】将列表转换为数组并将其存储到文件系统中[关闭]【英文标题】:Convert List to array and store it onto file system [closed] 【发布时间】:2016-11-20 19:51:44 【问题描述】:

我有一个ListItem 类型的列表

ListItem 是我制作的自定义类,如下所示:

public class ItemList

    public string ItemID  get; set; 
    public int QuantitySold  get; set; 
    public string GalleryURL  get; set; 

我需要将此列表存储到我的项目中的一个文件夹中,如下所示:

/Helpers/CachedResults/FileGoesHere

这样我就可以在每次需要时重新在代码中重新构建该列表...

【问题讨论】:

也许是 XML 序列化? ***.com/questions/4123590/serialize-an-object-to-xml 可能是这样,你能给我看一个我的案例的实际例子吗? :) 伙计们,我不想将它序列化为 XML...在构建列表之前的代码我实际上将 XML 文件转换为这个列表..现在我需要将它存储到某种类型文件,以便我可以在需要时重建它... 可能是字节数组或类似的东西??一些简单易行的东西,这样我就可以将该文件重建回这个原始列表:D 我没看到问题。 【参考方案1】:

我会用 LINQ to XML 来做这件事。

要使用它,需要添加对System.Xml.Linq的引用(在VS中,右键引用->添加引用->勾选System.Xml.Linq)。

您不需要将 List 转换为数组,但如果您愿意,当然可以。只需使用list.ToArray() 方法即可完成。

写入文件的代码是:

List<ListItem> list = new List<ListItem>();

// (the list is populated)

XDocument xDocument = new XDocument(); // create empty document
XElement root = new XElement("list"); // add root element, XML requires one single root element
xDocument.Add(root); // add root to document
foreach(var listItem in list) 

    var xElement = new XElement("list-item", // <list-item />
        new XAttribute("id", listItem.ItemID), // id="id"
        new XAttribute("quantity-sold", listItem.QuantitySold), // quantity-sold=5
        new XAttribute("gallery-url", listItem.GalleryURL) // gallery-url="foo/bar"
    );
    root.Add(xElement); // add list-item element to root


xDocument.Save("Helpers/CachedResults/File.xml"); // save file

注意该目录必须存在,Save 才能工作!

然后解析:

List<ListItem> list = new List<ListItem>();

XDocument xDocument = XDocument.Load("Helpers/CachedResults/File.xml"); // load from file
XElement root = xDocument.Element("list"); // get root element

foreach (XElement xElement in root.Elements("list-item")) // traverse through elements inside root element

    list.Add(new ListItem // add list items
    
        ItemID = xElement.Attribute("id").Value, // parse id
        QuantitySold = Int32.Parse(xElement.Attribute("quantity-sold").Value), // parse int for QuantitySold
        GalleryURL = xElement.Attribute("gallery-url").Value // parse url
    );

我们完成了!

【讨论】:

基本上是手动的XML序列化和反序列化。你会得到同样的结果。一个非常好的答案。 好吧,你确实写得很好,我得告诉你......但这不是要走的路,因为我实际上就在创建这个 List 之前,我确实解析了我从 ebay 获得的 XML 文档并将其转换为这个项目列表:D...这将是退一步或重做我实际所做的一切 XD 你为什么需要重做你的“ebay代码”呢? 事情是这样的,我从 ebay 获得了对通过 XML 请求传递给 ebay 的特定项目 (ID) 的响应... ebay 以 XML 文件的形式返回我的结果。我将从 ebay 获得的 XML 响应转换为这个 List 现在我正在尝试将该列表保存到文件系统中,以便我可以重新使用它来向最终用户显示结果(一种缓存方式结果)... 对我来说听起来不错,但我仍然看不到您需要在此过程中重新编码。【参考方案2】:

根据您的评论:

现在我需要将它存储到某种文件中,这样我就可以 需要时重建它...

你只需要以下几行:

File.WriteAllText(path, xml);
xml = File.ReadAllText(path);

其中xml 是您从序列化中获得的字符串/您之前存储并想要反序列化的序列化字符串)

(除了我在my comment中提到的实际序列化:Serialize an object to XML)

编辑

从 cmets 看来,您似乎在尝试解析收到的 xml。那么也许您应该考虑使用为此而设计的类。见Parsing XML using XDocument。

【讨论】:

这个答案中的“xml”是什么? 这可能是我从 eBay 收到的回复列表...等一下,我会试试这个...这可能是解决方案 @ispiro 有什么办法可以逐行阅读吗?因为我要写的每一行基本上都是一个 XML 文档,哈哈。。 @User987 File.ReadAllLines 更好吗? @Kinetic 更新了答案。

以上是关于将列表转换为数组并将其存储到文件系统中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

将每行从整数列表转换为整数数组?

如何将由空格缩进的用户输入存储到 String 数组中并将数字转换为 int 数组?

Python:字典列表列表[关闭]

如何将base64图像转换为图像并将其保存到文件系统[重复]

上传图像/文件并将其转换为 mysql 数据库

在 php 中将 XML 文档转换为数组时,有没有办法将其转换回来并将其保存为属性为元素的 XML 文件?