我一直在下面的二進制序列化的指導(這一個位置:http://www.codeproject.com/Articles/1789/Object-Serialization-using-C),我想我終於幾乎都有它的工作。當我保存文件被創建時,但是當我嘗試加載時,沒有任何內容被加載。我覺得我正在接近這個工作。任何意見,將不勝感激。下面的代碼:二進制序列化,我覺得我幾乎有工作
保存/載入類
[Serializable()]
public class SaveLoad : ISerializable
{
public int GameDay = Date.GameDay;
public List<Adventurer> Adventurers = FormMain.AdventurerManager.AdventurerList;
public SaveLoad()
{
GameDay = 0;
Adventurers = null;
}
public SaveLoad(SerializationInfo info, StreamingContext ctxt)
{
GameDay = (int)info.GetValue("Date", typeof(int));
Adventurers = (List<Adventurer>)info.GetValue("Adventurers", typeof(List<Adventurer>));
}
public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
info.AddValue("Date", GameDay);
info.AddValue("Adventurers", Adventurers);
}
}
保存/載入方法:
void btnSaveGame_Click(object sender, EventArgs e)
{
SaveLoad save = new SaveLoad();
Stream stream = File.Open("SaveGame.osl", FileMode.Create);
BinaryFormatter bformatter = new BinaryFormatter();
bformatter.Serialize(stream, save);
stream.Close();
}
void btnLoadGame_Click(object sender, EventArgs e)
{
SaveLoad load = new SaveLoad();
Stream stream = File.Open("SaveGame.osl", FileMode.Open);
BinaryFormatter bformatter = new BinaryFormatter();
load = (SaveLoad)bformatter.Deserialize(stream);
stream.Close();
Date.CalculateDate();
this.Visible = false;
((FormMain)(this.ParentForm)).ControlMainScreen.Visible = true;
}
你明白'null'?還是你得到一個例如既'GameDay'和'Adventurers'是'null'?我注意到,當你裝,你創建SaveLoad'的'一個新的實例,但幾行做了你再創建一個由反序列化。Perhapse你在錯誤的實例看? – 2013-05-09 23:30:52
我想那是案子。在教程中,GetObjectData從不被調用,我猜這就是錯誤。它需要發生什麼工作? – 2013-05-09 23:31:15
@MartinMulder當我點擊加載遊戲按鈕時,屏幕會回到主屏幕,但這就是發生的一切。 Load不做任何事情或保存不正確保存。 – 2013-05-09 23:54:55