将列表转换为数组并将其存储到文件系统中[关闭]
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根据您的评论:
现在我需要将它存储到某种文件中,这样我就可以 需要时重建它...
你只需要以下几行:
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 文档,哈哈。。 @User987File.ReadAllLines
更好吗?
@Kinetic 更新了答案。以上是关于将列表转换为数组并将其存储到文件系统中[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何将由空格缩进的用户输入存储到 String 数组中并将数字转换为 int 数组?