public class StorageOfData
{
public static StorageOfData instance;
private StorageOfData()
{ }
public static StorageOfData getInstance()
{
if (instance == null)
instance = new StorageOfData();
return instance;
}
private List<List<VersionOfFile>> list = new List<List<VersionOfFile>>();
public List<VersionOfFile> this[int index]
{
get
{
return list[index];
}
}
public void RestoreDataFromFile(String path)
{
StorageOfData DATA;
XmlSerializer mySerializer = new XmlSerializer(typeof(StorageOfData));
FileStream myFileStream = new FileStream(path + @"BAK\" + "history.xml", FileMode.Open);
DATA = (StorageOfData)mySerializer.Deserialize(myFileStream);
}
public void SaveDataToFile(String path)
{
StorageOfData DATA = StorageOfData.getInstance();
XmlSerializer mySerializer = new XmlSerializer(typeof(StorageOfData));
StreamWriter myWriter = new StreamWriter(path + @"BAK\" + "history.xml");
mySerializer.Serialize(myWriter, DATA);
myWriter.Close();
}
public void AddNewEntryIfRenamed(string filename, string real_filename, DateTime date, bool isDeleted)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i][list[i].Count - 1].Filename == filename)
{
list[i].Add(new VersionOfFile(filename, real_filename, date, isDeleted));
return;
}
}
list.Add(new List<VersionOfFile>());
list[list.Count - 1].Add(new VersionOfFile(filename, real_filename, date, isDeleted));
}
public void AddNewEntryIfCopyExists(string filename, string real_filename, DateTime date, bool isDeleted)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i][list[i].Count - 1].Filename == filename)
{
list[i].Add(new VersionOfFile(filename, real_filename, date, isDeleted));
return;
}
}
list.Add(new List<VersionOfFile>());
list[list.Count - 1].Add(new VersionOfFile(filename, real_filename, date, isDeleted));
}
public void AddNewEntry(string filename, DateTime date, bool isDeleted)
{
for (int i = 0; i < list.Count; i++)
{
if (list[i][list[i].Count - 1].Filename == filename)
{
list[i].Add(new VersionOfFile(filename, date, isDeleted));
return;
}
}
list.Add(new List<VersionOfFile>());
list[list.Count - 1].Add(new VersionOfFile(filename, date, isDeleted));
}
}
internal struct VersionOfFile
{
private string filename;
private string real_filename;
private DateTime date;
private bool isDeleted;
public string Filename
{
get
{
return filename;
}
}
public string Real_filename
{
get
{
return real_filename;
}
}
public DateTime Date
{
get
{
return date;
}
}
public bool IsDeleted
{
get
{
return isDeleted;
}
}
public VersionOfFile(string filename, string real_filename, DateTime date, bool isDeleted)
{
this.filename = filename;
this.real_filename = real_filename;
this.date = date;
this.isDeleted = isDeleted;
}
public VersionOfFile(string filename, DateTime date, bool isDeleted)
{
this.filename = filename;
this.date = date;
this.isDeleted = isDeleted;
this.real_filename = String.Empty;
}
我正在写一个简单的程序来备份我的文件,但我遇到了问题。 我应该记录任何更改,但是当我试图序列化有关更改信息的singletone存储信息时,我只会得到一个空的.xml文件。 我应该怎么做seriallise dynamaic数组(列表<>)?为什么XML序列化不起作用
OK ......与所有应有的尊重@ Byg1为'一个简单的程序'我想哟你是否过于复杂的事情......你能否解释你正在试图达到的目标,或提供你期望看到的XML样本...... – Monty
要用'XmlSerializer'序列化你的'StorageOfData'类,它必须有一个公共无参数的构造函数。你的私人。请参阅http://stackoverflow.com/questions/267724/why-xml-serializable-class-need-a-parameterless-constructor。除此之外,您可能还有其他问题。如果你这样做,试着把你的代码分解成每个问题的[最小的,完整的例子](http://stackoverflow.com/help/mcve)。 – dbc
另外,'XmlSerializer'只能使用public'get'和'set'序列化属性。请参阅https://stackoverflow.com/questions/575432/why-isnt-my-public-property-serialized-by-the-xmlserializer。所以你的'VersionOfFile'将不能正确序列化。 – dbc