//Serialize the Object
MemoryStream ms = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms , ObjectToSerialize);
byte[] arrbyte = new byte[ms .Length];
ms.Read(arrbyte , 0, (int)ms .Length);
ms.Close();
//Deserialize the Object
Stream s = new MemoryStream(arrbyte);
s.Position = 0;
Object obj = formatter.Deserialize(s);//Throws an Exception
s.Close();
Si trato de deserializar con la forma anterior se da la excepción, ya queDeserialización que no trabaja en MemoryStream
'Secuencia binaria '0' no contiene una BinaryHeader válida. Las posibles causas son la transmisión no válida o la modificación de la versión del objeto entre la serialización y la deserialización.
Cuando a continuación el código está trabajando
//Serialize the Object
IFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
formatter.Serialize(ms, ObjectToSerialize);
ms.Seek(0, SeekOrigin.Begin);
byte[] arrbyte = ms.ToArray();
//Deserialize the Object
Stream s= new MemoryStream(byt);
stream1.Position = 0;
Object obj = formatter.Deserialize(s);
stream1.Close();
La única diferencia es el primer enfoque utiliza el método Read para poblar la matriz de bytes en tanto que la segunda utiliza el Seek & ToArray() para rellenar la matriz de bytes. ¿Cuál es el motivo de la excepción?
Ah, bien, estaba mirando eso por un tiempo tratando de resolverlo :) –
@dtb, Gracias. Ahora entendí el problema – Ragunath
@dtb muchas gracias pasé unos días en este asunto T__T –