Binary serialization and deserialization without creating files (via strings)

.net, c#, serialization

Solution

The result of serializing an object with BinaryFormatter is an octet stream, not a string. You can't just treat the bytes as characters like in C or Python.

Encode the serialized object with Base64 to get a string instead:

public static string SerializeObject(object o)
{
    if (!o.GetType().IsSerializable)
    {
        return null;
    }

    using (MemoryStream stream = new MemoryStream())
    {
        new BinaryFormatter().Serialize(stream, o);
        return Convert.ToBase64String(stream.ToArray());
    }
}

and

public static object DeserializeObject(string str)
{
    byte[] bytes = Convert.FromBase64String(str);

    using (MemoryStream stream = new MemoryStream(bytes))
    {
        return new BinaryFormatter().Deserialize(stream);
    }
}

Problem

I'm trying to create a class that will contain functions for serializing/deserializing objects to/from string. That's what it looks like now: ``` public class BinarySerialization { public static string SerializeObject(object o) { string result = ""; if ((o.GetType().Attributes & TypeAttributes.Serializable) == TypeAttributes.Serializable) { BinaryFormatter f = new BinaryFormatter(); using (MemoryStream str = new MemoryStream()) { f.Serialize(str, o); str.Position = 0; StreamReader reader = new StreamReader(str); result = reader.ReadToEnd(); } } return result; } public static object DeserializeObject(string str) { object result = null; byte[] bytes = System.Text.Encoding.ASCII.GetBytes(str); using (MemoryStream stream = new MemoryStream(bytes)) { BinaryFormatter bf = new BinaryFormatter(); result = bf.Deserialize(stream); } return result; } } ``` SerializeObject method works well, but DeserializeObject does not. I always get an exception with message "End of Stream encountered before parsing was completed". What may be wrong here?

Original source