BinaryFormatter似乎与嵌套的Dictionary搞混了



[Edit]我明白了这篇文章被降级的原因。我不知道为什么,但我确信我做错了什么。所以,如果你有时间的话,请考虑评论并告诉我帖子有什么问题,然后再下调:(谢谢

因此,我有我的Saving System的这一部分,我想在其中序列化一个名为CaptureState的函数提供的嵌套字典。在调试中,我检查CaptureState是否返回了一个Dictionary,该Dictionary的值位于SceneManager.GetActiveScene((.buildIndex键下。这证明了该方法实际上返回了所需的Dictionary。然而,如果我序列化它,然后反序列化它,那么字典就会出错。它只包含1个项(应该包含7个(,并且该项位于键1下(SceneManager.GetActiveScene((.buildIndex在测试时为0((这些东西在所附的代码中没有显示,但请相信我:D(当然(正如我们在所附代码片段中看到的那样(,试图访问键SceneManager.GetActiveScene((.bbuildIndex(为0(会引发KeyNotFoundException。如果重要的话,我会使用Unity。

void SaveFile(string saveFile)
{
string path = GetPathFromSaveFile(saveFile);
using(FileStream stream = File.Open(path, FileMode.Open))
{
stream.Position = 0;
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, CaptureState(LoadFile(path, stream, formatted)));
//From this point, testing purposes
stream.Position = 0;
Dictionary<int, Dictionary<string, object>> testDicta = (Dictionary<int, Dictionary<string, object>>)CaptureState(LoadFile(path, stream, formatter));
print(testDicta[SceneManager.GetActiveScene().buildIndex].Count); // Shows the proper count
stream.Position = 0;
Dictionary<int, Dictionary<string, object>> testDict = (Dictionary<int, Dictionary<string, object>>)formatter.Deserialize(stream);
print(testDict[SceneManager.GetActiveScene().buildIndex].Count); // Throws me a KeyNotFoundException
}
}

好的,我找到了解决方案。问题是,我启动了序列化,并传入了包含一个函数的参数,该函数在此期间启动了DeSerialization。所以他们同时进行序列化和去序列化,这导致了奇怪的结果。

最新更新