为什么XmlSerializer可以在我的单例上工作但不能在BinaryFormatter上工作?

时间:2014-07-07 01:27:42

标签: c#

我拉我的头发试图让我的游戏保存从基于二进制的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对象并填充该对象,则数据会正确填充,因此我知道它正在进行序列化,但我的游戏显然不起作用,因为数据不是需要的地方。

0 个答案:

没有答案