c# - BinaryFormatter 似乎弄乱了嵌套字典
问题描述
[编辑] 我明白为什么帖子被降级了。我不知道为什么,但我确定我做错了什么。所以,如果你有时间,请考虑评论并告诉我这篇文章有什么问题,在你降级之前:)谢谢
所以,我有我的保存系统的这一部分,我想在其中序列化由一个名为 CaptureState 的函数给出的嵌套字典。在我的调试中,我检查 CaptureState 是否返回具有 SceneManager.GetActiveScene().buildIndex 键下的值的字典。它证明,该方法实际上返回了所需的字典。但是,如果我序列化它然后反序列化它,字典就会搞砸了。它仅包含 1 个项目(它应该包含 7 个),并且该项目位于键 1 下(SceneManager.GetActiveScene().buildIndex 在测试时为 0)(这些内容不会在附加代码中显示,但是相信我 :D) 当然(正如我们在附加的代码片段中看到的那样),尝试访问关键 SceneManager.GetActiveScene().buildIndex(which is 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
}
}
解决方案
好的,我找到了解决方案。问题是我启动了序列化,并传入了包含同时启动反序列化的函数的参数。所以他们同时在序列化和反序列化,这导致了奇怪的结果。
推荐阅读
- javascript - How to create a grid in react?
- algorithm - Finding items in array within range in non naive approach
- swiftui - ObservableObject with NWPathMonitor
- c# - Find General Path Inscribed in Polygon
- sql - SQL Server 列数据清理
- java - Why does my priorityqueue look like this?
- python - 使用新名称复制文件夹 - python
- c++ - 在给定条件的情况下,如何从输出语句中删除值?- C++
- c++ - 如何在类成员函数中添加错误检查?
- python - 如何选择特征尺寸