Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using BinaryWriter on an Object

My application is a small C# database, and I'm using BinaryWriter to save the database to a file which is working fine with the basic types such as bool, uint32 etc.
Although I've got a variable that is of type Object (allowing the user to store any data type), however as my application doesn't (nor needs to) know the real type of this variable, I'm unsure how to write it using BinaryWriter.
Is there a way I could perhaps grab the memory of the variable and save that? Would that be reliable?

Edit:

The answer provided by ba_friend has two functions for de/serialising an Object to a byte array, which can be written along with its length using a BinaryWriter.

like image 504
R4D4 Avatar asked Jul 20 '11 09:07

R4D4


1 Answers

You can use serialization for that, especially the BinaryFormatter to get a byte[].
Note: The types you are serializing must be marked as Serializable with the [Serializable] attribute.

public static byte[] SerializeToBytes<T>(T item)
{
    var formatter = new BinaryFormatter();
    using (var stream = new MemoryStream())
    {
        formatter.Serialize(stream, item);
        stream.Seek(0, SeekOrigin.Begin);
        return stream.ToArray();
    }
}

public static object DeserializeFromBytes(byte[] bytes)
{
    var formatter = new BinaryFormatter();
    using (var stream = new MemoryStream(bytes))
    {
        return formatter.Deserialize(stream);
    }
}
like image 69
ba__friend Avatar answered Oct 17 '22 17:10

ba__friend