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); ```

Original source