对于我的任务,我需要将我的列表视图项目(详细信息视图)保存到文件,然后从文件读取到列表视图。很少有子项目有标签。
对于文件的读写,我使用以下链接中的 deadlydog 答案(第二个答案):
How to save/restore serializable object to/from file?
但问题是,我发现它只保存了 Items 文本属性,而不是标签属性。
所以,我的问题是如何更新它以便它也能保存标签属性?
这是我重现错误的简化代码:
//Write
List<ListViewItem> lactions;
ListViewItem oItem;
lactions = new List<ListViewItem>();
//add few items
for (int i = 0; i < 5; i++)
{
oItem = new ListViewItem();
oItem.Text = "Text " + i;
oItem.Tag = "Tag " + i;
lactions.Add(oItem);
}
WriteObjectToBinaryFile<List<ListViewItem>>(sAPPPath + "\\ListItems.cfg",lactions);
//read
List<ListViewItem> lactions;
ListViewItem oItem;
lactions = ReadObjectFromBinaryFile<List<ListViewItem>>(sAPPPath + "\\ListItems.cfg");
for (int i = 0; i < lactions.Count; i++)
{
oItem = lactions[i];
MessageBox.Show(oItem.Text);
MessageBox.Show(oItem.Tag.ToString()); //this line fire an exception/error
}
public static void WriteToBinaryFile<T>(string filePath,T objectToWrite,bool append = false)
{
using (Stream stream = File.Open(filePath,append ? FileMode.Append : FileMode.Create))
{
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
binaryFormatter.Serialize(stream,objectToWrite);
}
}
public static T ReadFromBinaryFile<T>(string filePath)
{
using (Stream stream = File.Open(filePath,FileMode.Open))
{
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
return (T)binaryFormatter.Deserialize(stream);
}
}
任何帮助将不胜感激..
注意:当然我知道还有其他方法,比如循环所有项目都保存为人类可读/文本格式并读取文本文件并使用代码创建项目。但我想知道简化的(单行/几行)代码是否可以达到目的,那为什么还要写一百行代码?
最好的问候