SEARCH:   GO
{Blog entries}
Jul 29

Written by: Javier Callico
7/29/2007  RssIcon

Some time ago I developed a couple of functions to serialize an object and store it in a byte array and viceversa. Today I needed to store the resulting byte array to a System.String (I wanted to save it to an encrypted cookie which takes string as input parameter).

I tried to encode the byte array using the ASCII and UTF8 encoders but some byte values were not decoded properly, i.e. the value 255 after the encoding/decoding process will be decoded as 127. These were the error I would get:

- Invalid BinaryFormatter stream.
- Binary stream does not contain a valid BinaryHeader, 0 possible causes, invalid stream or object version change between serialization and deserialization.


After trying some other ideas I found that encoding/decoding to Base64 will get me the desired result.  


Find the functions below.


/// Serializes a given object to binary
public
static string SerializeToString(object o)

{
   
return Convert.ToBase64String(SerializeToBinary(o));
}

/// Deserializes a given object from binary
public static object DeserializeFromString(string s)

{
   
return DeserializeFromBinary(Convert.FromBase64String(s));
}

/// Serializes a given object to binary
public
static byte[] SerializeToBinary(object o)
{

   BinaryFormatter serializer = new BinaryFormatter();
   MemoryStream memoryStream =
new MemoryStream();
   serializer.Serialize(memoryStream, o);
   Byte[] buffer = memoryStream.ToArray();
   memoryStream.Close();
   
return buffer;
}

/// Deserializes a given object from binary
public static object DeserializeFromBinary(byte[] b)
{
   MemoryStream memoryStream =
new MemoryStream(b);
   memoryStream.Position = 0;
   
BinaryFormatter serializer = new BinaryFormatter();
   
object o = serializer.Deserialize(memoryStream);
   memoryStream.Close();
   
return o;
}

Tags:
Categories:

Your name:
Gravatar Preview
Your email:
(Optional) Email used only to show Gravatar.
Your website:
Title:
Comment:
Add Comment   Cancel