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