c# serialization deserialization memorystream

c# - Serialización/deserialización con flujo de memoria



serialization deserialization (2)

Tengo un problema con la serialización usando la secuencia de la memoria. Aquí está mi código:

/// <summary> /// serializes the given object into memory stream /// </summary> /// <param name="objectType">the object to be serialized</param> /// <returns>The serialized object as memory stream</returns> public static MemoryStream SerializeToStream(object objectType) { MemoryStream stream = new MemoryStream(); IFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, objectType); return stream; } /// <summary> /// deserializes as an object /// </summary> /// <param name="stream">the stream to deserialize</param> /// <returns>the deserialized object</returns> public static object DeserializeFromStream(MemoryStream stream) { IFormatter formatter = new BinaryFormatter(); stream.Seek(0, SeekOrigin.Begin); object objectType = formatter.Deserialize(stream); return objectType; }

El error que recibo es el siguiente: stream no es un formato binario válido. Los contenidos iniciales (en bytes) son: bla ...

No estoy exactamente seguro de qué está causando el error. Cualquier ayuda sería muy apreciada.

Ejemplo de la llamada:

Dog myDog = new Dog(); myDog.Name= "Foo"; myDog.Color = DogColor.Brown; MemoryStream stream = SerializeToStream(myDog) Dog newDog = (Dog)DeserializeFromStream(stream);


Este código funciona para mí:

public void Run() { Dog myDog = new Dog(); myDog.Name= "Foo"; myDog.Color = DogColor.Brown; System.Console.WriteLine("{0}", myDog.ToString()); MemoryStream stream = SerializeToStream(myDog); Dog newDog = (Dog)DeserializeFromStream(stream); System.Console.WriteLine("{0}", newDog.ToString()); }

Donde los tipos son así:

[Serializable] public enum DogColor { Brown, Black, Mottled } [Serializable] public class Dog { public String Name { get; set; } public DogColor Color { get;set; } public override String ToString() { return String.Format("Dog: {0}/{1}", Name, Color); } }

y los métodos de utilidad son:

public static MemoryStream SerializeToStream(object o) { MemoryStream stream = new MemoryStream(); IFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, o); return stream; } public static object DeserializeFromStream(MemoryStream stream) { IFormatter formatter = new BinaryFormatter(); stream.Seek(0, SeekOrigin.Begin); object o = formatter.Deserialize(stream); return o; }


BinaryFormatter puede producir resultados no válidos en algunos casos específicos. Por ejemplo, omitirá los caracteres sustitutos no pareados. También puede tener problemas con los valores de los tipos de interfaz. Lea esta página de documentación que incluye contenido de la comunidad.

Si encuentra que su error es persistente, puede considerar usar un serializador XML como DataContractSerializer o XmlSerializer .