#c# #exception #deserialization #binaryformatter
#c# #исключение #Десериализация #двоичный форматировщик
Вопрос:
Я разрабатываю игру с использованием UnityEngine (видите, что я там сделал?), И я пытался десериализовать файл, который был сериализован двоичным форматером. Однако он выдает исключение EndOfStreamException, когда компилятор начинает десериализацию моего файла.
BinaryFormatter formatter = new BinaryFormatter();
FileStream file = File.Open(myPath);
LevelData lvlData = (LevelData)formatter.Deserialize(file);
И это мой LevelData
класс:
[Serializable]
class LevelData
{
public Dictionary<Vector2, Level> levelButtonData = new Dictionary<Vector2, Level>();
}
Что здесь не так? На самом деле, вчера он работал просто отлично. Должно быть, я что-то случайно изменил.
Дополнительная информация
Вот как я его сериализую:
BinaryFormatter formatter = new BinaryFormatter();
FileStream file = File.Create(myPath);
LevelData lvlData = new LevelData();
lvlData.levelButtonData = this.levelButtonData;
formatter.Serialize(file, lvlData);
file.Close();
Комментарии:
1. Каково содержимое файла? Я предполагаю, что он все еще ожидает некоторых данных, но он уже попадает в EOF.
2. Вероятно, файл записан неправильно.
3. Извините, содержимое как в ..? Это просто этот класс LevelData со словарем, сериализуемым в dat. файл.
4. Вы изменили содержимое сериализованных классов — добавили / удалили свойства?
5. Основываясь на отправленном вами коде, вы не
file
удаляете его . Могло ли быть исключениеSerialize
со времени вашей последней перезагрузки, которое оставилоfile
бы открытым? — добавление using aroundFileStream file...
позаботится об этом за вас.