I’m trying to serialize my MMF to file and here is the code:
class MMF {
private const string filename = @"c:\NFS";
private long offset = 0;
private long length = 194;
private byte[] buffer;
public MMF() {
using (var mmf =
MemoryMappedFile.CreateFromFile(filename, FileMode.OpenOrCreate, null, offset + length, MemoryMappedFileAccess.ReadWriteExecute)) {
using (var accessor = mmf.CreateViewAccessor(offset, length, MemoryMappedFileAccess.ReadWriteExecute)) {
buffer = new byte[194];
/*FS fs = new FS();
fs.Files[0].Path = "test";
accessor.WriteArray<byte>(0, buffer, 0, (int)length);*/
accessor.ReadArray<byte>(0, buffer, 0, (int)length);
FS fs = (FS)ToObject(buffer);
Console.WriteLine(fs.Files[0].Path);
}
}
}
private byte[] ToByteArray(object source) {
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream()) {
formatter.Serialize(stream, source);
return stream.ToArray();
}
}
private object ToObject(byte[] source) {
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream(source)) {
formatter.Deserialize(stream);
return stream;
}
}
}
On deserialization part I’m getting error:
An unhandled exception of type
‘System.Runtime.Serialization.SerializationException’ occurred in
mscorlib.dllAdditional information: A binary stream “0” does not contain a valid
binary header BinaryHeader. Possible causes: invalid stream or object
version change between serialization and deserialization.
How to Deserialize the file properly? Where is my mistake?
thank you
You might want to let MMF implement ISerializable and implement the GetObjectData method.