我拉我的头发试图让我的游戏保存从基于二进制的XML转换文件。我的GameManager类是一个单例。使用XmlSerializer加载和保存其实例变量可以完美地工作,但是当我尝试使用BinaryFormatter时,我收到一个错误,即'实例'不设置为对象的引用。 '实例'调用GameManager.Instance.LoadGame后,它不会为null,因为它是一个单例。如果它为null,那么在调用方法时就会创建它,对吗?
这是Xml版本,工作正常:
if (newText != null) {
XmlSerializer xmlSerializer = new XmlSerializer(typeof(GameManager));
using (XmlReader reader = XmlReader.Create(new StringReader(newText)))
{
if (xmlSerializer.CanDeserialize(reader))
GameManager.instance = (GameManager)xmlSerializer.Deserialize(reader);
}
}
这是二进制版本,我没有设置一个对象,而不是参考GameManager.instance':
FileStream stream = new FileStream(fileName, FileMode.Open);
BinaryFormatter formatter = new BinaryFormatter();
GameManager.instance = (GameManager)formatter.Deserialize( stream );
stream.Close();
我尝试为我的Instance创建一个setter,它会创建一个新的'实例'如果它不存在,并且代码在没有崩溃的情况下工作,但数据没有正确填充,当游戏的其他部分试图访问它时,它全部为空。如果我创建一个全新的GameManager对象并填充该对象,则数据会正确填充,因此我知道它正在进行序列化,但我的游戏显然不起作用,因为数据不是需要的地方。