我要存储的课程:
[Serializable]
public class Storagee
{
int tabCount;
List<string> tabNames;
List<EachItemListHolder> eachItemsHolder;
public void PreSetting(int count, List<string> strings, List<EachItemListHolder> items)
{
tabCount = count;
tabNames = strings;
eachItemsHolder = items;
}
public void PreSetting(int count ) //debug purpose
{
tabCount = count;
}
public int GetTabCount() { return tabCount; }
public List<string> GetTabNames() { return tabNames; }
public List<EachItemListHolder> GetListEachItemListHolder() { return eachItemsHolder; }
}
序列化类:
namespace Book
{
class SaveAndLoad
{
public void SaveAll(Storagee str)
{
var path = @"C:\Temp\myserializationtest.xml";
using (FileStream fs = new FileStream(path, FileMode.Create))
{
XmlSerializer xSer = new XmlSerializer(typeof(Storagee));
xSer.Serialize(fs, str);
}
}
public Storagee LoadAll()
{
var path = @"C:\Temp\myserializationtest.xml";
using (FileStream fs = new FileStream(path, FileMode.Open)) //double
{
XmlSerializer _xSer = new XmlSerializer(typeof(Storagee));
var myObject = _xSer.Deserialize(fs);
return (Storagee)myObject;
}
}
}
}
主要方法(窗口形式):
class Book
{
List<EachTab> eachTabs;
Storagee storagee;
SaveAndLoad saveAndLoad;
eachTabs = new List<EachTab>();
storagee = new Storagee();
saveAndLoad = new SaveAndLoad();
void Saving()
{
int count = UserTab.TabCount; // tab counts
storagee.PreSetting(count);
saveAndLoad.SaveAll(storagee);
}
}
它生成xml文件,但不保存数据。
我在其他项目中尝试了序列化代码,并且该代码有效。
但它不在此解决方案中
由于我是编码的新手,所以我不知道问题出在哪里
尤其是序列化的部分。
序列化代码的复制和粘贴稍加修改
答案 0 :(得分:1)
它生成xml文件,但不保存数据。
它不保存任何数据,因为您的类不提供可以序列化的任何数据。 XmlSerializer
仅序列化公共字段和属性,而Storagee
类没有任何内容。
例如,您可以将公共获取方法更改为公共属性:
public int TabCount { get; set; }
public List<string> TabNames { get; set; }
public List<string> EachItemsHolder { get; set; }
或者,如果不选择使用公共属性,则还可以通过实现IXmlSerializable来考虑使用自定义序列化。