[Редактировать] Я вижу, что почему-то пост понижен. Я не знаю почему, но я уверен, что сделал что-то не так. Так что, пожалуйста, если у вас есть время, подумайте о том, чтобы прокомментировать и рассказать, что не так с постом, пожалуйста, прежде чем вы понизите его :) Спасибо
Итак, у меня есть эта часть моей Сберегательной системы, в которой я хочу сериализовать вложенный словарь, заданный функцией CaptureState. В моей отладке я проверяю, возвращает ли CaptureState словарь со значением под ключом SceneManager.GetActiveScene (). BuildIndex. Это доказывает, что метод действительно возвращает нужный словарь. Однако, если я сериализую его, а затем десериализую, словарь испортится. Он содержит только 1 элемент (он должен содержать 7), и этот элемент находится под ключом 1 (SceneManager.GetActiveScene (). BuildIndex равен 0 на момент тестирования) (эти вещи не отображаются в прилагаемом коде, но поверьте мне: D) И, конечно же (как мы видим в прикрепленном фрагменте кода), попытка доступа к ключу SceneManager.GetActiveScene (). buildIndex (который равен 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
}
}