Some binary serialization links:
Version Tolerant Serialization
Format Your Way to Success with the .NET Framework Versions 1.1 and 2.0 - Used some of the classes here to develop the BinarySerializer class below
Advanced serialization tips
Custom Serialization
Here is a sample binary serialisation class
Version Tolerant Serialization
Format Your Way to Success with the .NET Framework Versions 1.1 and 2.0 - Used some of the classes here to develop the BinarySerializer class below
Advanced serialization tips
Custom Serialization
Here is a sample binary serialisation class
private class BinarySerializer
{
internal interface IGenericFormatter
{
T Deserialize<T>(Stream serializationStream);
void Serialize<T>(Stream serializationStream, T graph);
}
internal class GenericFormatter<F> : IGenericFormatter
where F : IFormatter, new()
{
IFormatter m_Formatter = new F();
public T Deserialize<T>(Stream serializationStream)
{
return (T)m_Formatter.Deserialize(serializationStream);
}
public void Serialize<T>(Stream serializationStream, T graph)
{
m_Formatter.Serialize(serializationStream, graph);
}
}
internal class GenericBinaryFormatter :
GenericFormatter<BinaryFormatter> { }
public void SerializeToFile<Type>(Type obj, string filePath)
{
IGenericFormatter formatter = new GenericBinaryFormatter();
using (Stream stream = new FileStream(
filePath, FileMode.Create, FileAccess.ReadWrite))
{
formatter.Serialize(stream, obj);
stream.Close();
}
}
public Type DeserializeFromFile<Type>(string filePath)
{
Type res = default(Type);
if (File.Exists(filePath))
{
IGenericFormatter formatter = new GenericBinaryFormatter();
using (Stream stream = new FileStream(
filePath, FileMode.Open, FileAccess.ReadWrite))
{
res = formatter.Deserialize<Type>(stream);
stream.Close();
}
}
return res;
}
public byte[] SerializeToByteArray<Type>(Type obj)
{
byte[] res = null;
IGenericFormatter formatter = new GenericBinaryFormatter();
using (MemoryStream stream = new MemoryStream())
{
formatter.Serialize(stream, obj);
res = stream.ToArray();
stream.Close();
}
return res;
}
public Type DeserializeFromByteArray<Type>(byte[] bytes)
{
Type res = default(Type);
if ((bytes != null) && (bytes.Length > 0))
{
IGenericFormatter formatter = new GenericBinaryFormatter();
using (MemoryStream stream = new MemoryStream(bytes))
{
res = formatter.Deserialize<Type>(stream);
stream.Close();
}
}
return res;
}
public Type Clone<Type>(Type obj)
{
byte[] bytes = SerializeToByteArray<Type>(obj);
Type res = DeserializeFromByteArray<Type>(bytes);
return res;
}
}
Can be used with this code to test binary serialisation of something
private static Type SerializeDeserialize<Type>(Type src)
where Type
{
BinarySerializer bs = new BinarySerializer();
byte[] bytes = bs.SerializeToByteArray<Type>(src);
// Use these lines to create binary serialization files,
//string filePath = Path.Combine(Path.GetTempPath(), "SerialisedObject.bin");
//File.WriteAllBytes(filePath, bytes);
Type ds = bs.DeserializeFromByteArray<Type>(bytes);
return ds;
}
No comments:
Post a Comment