El título debe dejar en claro lo que estoy tratando de hacer: obtener un objeto Entity Framework, serializarlo en una cadena, guardar la cadena en un archivo, luego cargar el texto del archivo y reserialize en un objeto. ¡Listo!Serializar objeto Entity Framework, guardar en archivo, leer y DeSerialize
Pero, por supuesto, no funciona, no estaría aquí. Cuando trato de reservar, aparece el error "La secuencia de entrada no está en un formato binario válido", así que obviamente me falta algo en alguna parte.
Éste es cómo serializar y guardar mis datos:
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();
Lo que me da un archivo de texto sin sentido grande, como era de esperar. Luego trato de reconstruir mi objeto en otro lugar:
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);
Y luego aparece el error de formato binario.
Obviamente estoy siendo muy estúpido. Pero, ¿de qué manera?
Saludos, Matt
Genial, gracias. ¡Y arregló mi código sin costo adicional! La conversión de Base64 demuestra los peligros de copiar otros bits de su código y volver a usarlos sin leerlos correctamente. –