Serializing/deserializing with memory stream
.net, c#, deserialization, memorystream, serialization
Solution
This code works for me:
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());
}
Where the types are like this:
[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);
}
}
and the utility methods are:
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;
}
Problem
I'm having an issue with serializing using memory stream. Here is my code: ``` /// <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; } ``` The error I'm getting is as follow: stream is not a valid binary format. The starting contents (in bytes) are: blah.... I'm not exactly sure what is causing the error. Any help would be greatly appreciated. Example of the call: ``` Dog myDog = new Dog(); myDog.Name= "Foo"; myDog.Color = DogColor.Brown; MemoryStream stream = SerializeToStream(myDog) Dog newDog = (Dog)DeserializeFromStream(stream); ```