将List转换为数组并将其存储到文件系统中

时间:2016-11-20 19:51:45

标签: c# arrays save filesystems

我有一个ListItem

类型的列表

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

public class ItemList
{
    public string ItemID { get; set; }
    public int QuantitySold { get; set; }
    public string GalleryURL { get; set; }
}

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

/Helpers/CachedResults/FileGoesHere

因此,每当我需要代码时,我都可以重新构建该列表...

2 个答案:

答案 0 :(得分:3)

我会用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
    });
}

我们已经完成了!

答案 1 :(得分:0)

根据你的评论:

  

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

您只需要以下几行:

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

其中xml是您从序列化获得的字符串/您先前存储并希望反序列化的序列化字符串

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

修改

从评论中,您似乎试图解析收到的xml。那么也许您应该考虑使用为此制作的类。请参阅Parsing XML using XDocument