Заголовок должен прояснить, что я пытаюсь сделать - получить объект Entity Framework, сериализовать его в строку, сохранить строку в файле, затем загрузить текст из файла и повторно выполнить его сериализацию в объект.Вуаля!
Но, конечно, это не работает, иначе меня бы здесь не было.Когда я пытаюсь выполнить повторную сериализацию, я получаю сообщение об ошибке «Входной поток не в допустимом двоичном формате», поэтому я явно чего-то упускаю.
Вот как я сериализую и сохраняю свои данные:
string filePath = System.Configuration.ConfigurationManager.AppSettings["CustomersLiteSavePath"];
string fileName = System.Configuration.ConfigurationManager.AppSettings["CustomersLiteFileName"];
if(File.Exists(filePath + fileName))
{
File.Delete(filePath + fileName);
}
MemoryStream memoryStream = new MemoryStream();
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memoryStream, entityFrameWorkQuery.First());
string str = System.Convert.ToBase64String(memoryStream.ToArray());
StreamWriter file = new StreamWriter(filePath + fileName);
file.WriteLine(str);
file.Close();
Что дает мне большой бессмысленный текстовый файл, как и следовало ожидать.Затем я пытаюсь перестроить мой объект в другом месте:
CustomerObject = File.ReadAllText(path);
MemoryStream ms = new MemoryStream();
FileStream fs = new FileStream(path, FileMode.Open);
int bytesRead;
int blockSize = 4096;
byte[] buffer = new byte[blockSize];
while (!(fs.Position == fs.Length))
{
bytesRead = fs.Read(buffer, 0, blockSize);
ms.Write(buffer, 0, bytesRead);
}
BinaryFormatter formatter = new BinaryFormatter();
ms.Position = 0;
Customer cust = (Customer)formatter.Deserialize(ms);
И затем я получаю ошибку двоичного формата.
Я, очевидно, очень глупо.Но каким образом?
Приветствия, Мэтт