2012-08-16 77 views
1

我想我的序列化MMF到文件,並在這裏是代碼:如何反序列化的BinaryFormatter

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; 
      } 
     } 
    } 

在反序列化部分我收到提示:

An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll

Additional 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.

如何反序列化文件正確嗎?我的錯誤在哪裏?

謝謝

+0

'return formatter.Deserialize(stream);' – leppie 2012-08-16 14:41:50

+0

@leppie與那個相同:( – Cynede 2012-08-16 14:46:22

+0

錯誤在formatter.Deserialize(stream)行級別 – Cynede 2012-08-16 15:05:00

回答

0

您可能希望讓MMF實施ISerializable並實現GetObjectData方法。 (

+0

你確定這個錯誤是關於這個的嗎? – Cynede 2012-08-16 15:04:36