Я пытаюсь десериализовать объект, который я сохранил в файл (с помощью Binary Formatter). Что бы я ни пытался, я получаю исключение: Конец потока обнаружен до завершения синтаксического анализа.
У меня есть следующие строки кода:
public static T DeserializeFromBinaryFile<T>(string fileName)
{
T instance = default(T);
FileStream fs = new FileStream(fileName, FileMode.Open);
try
{
BinaryFormatter formatter = new BinaryFormatter();
instance = (T)formatter.Deserialize(fs);
}
catch{}
finally
{
fs.Close();
}
return instance;
}
Я также пробовал:
public static T DeserializeFromBinaryFile<T>(string fileName)
{
T instance = default(T);
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
MemoryStream ms = new MemoryStream();
try
{
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, 0, (int)fs.Length);
ms.Write(bytes, 0, (int)fs.Length);
ms.Position = 0;
ms.Seek(0, SeekOrigin.Begin);
}
catch { }
try
{
BinaryFormatter formatter = new BinaryFormatter();
instance = (T)formatter.Deserialize(ms);
}
catch { }
finally
{
ms.Close();
fs.Close();
}
return instance;
}
Но что бы я ни делал, всегда получаю исключение:
Конец потока обнаружен до завершения синтаксического анализа
ДОПОЛНЕНИЕ. Я только что провел дополнительные тесты. Если у меня есть простой объект, всего несколько свойств, он отлично работает. Используя более (большой) сложный объект с инкапсулированными другими объектами, перечислениями и т. д., я получаю исключение.