我有一个ListItem
ListItem
是我制作的自定义类,如下所示:
public class ItemList
{
public string ItemID { get; set; }
public int QuantitySold { get; set; }
public string GalleryURL { get; set; }
}
我需要将此List存储到项目中的文件夹中,如下所示:
/Helpers/CachedResults/FileGoesHere
因此,每当我需要代码时,我都可以重新构建该列表...
答案 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。