Десериализация байта [] обратно в DataTable - PullRequest
0 голосов
/ 13 августа 2011

У меня есть следующий код для сериализации / десериализации DataTable:

    public static byte[] Serialize(DataTable dt)
    {
        System.IO.MemoryStream stream = new System.IO.MemoryStream();
        System.Runtime.Serialization.IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        formatter.Serialize(stream, dt); 
        return stream.GetBuffer(); 
    }


    public static DataTable Deserialize(byte[] buffer) 
    {
        System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer);
        System.Runtime.Serialization.IFormatter formatter = new BinaryFormatter();

        return formatter.Deserialize(stream) as DataTable; 
    }  

Метод сериализации работает нормально, но метод десериализации выдает эту ошибку:

  The input stream is not a valid binary format. The starting contents (in bytes) are: 1F-8B-08 ...

Я 99%уверен, что я получил этот метод для работы в прошлом, не уверен, что не так.

1 Ответ

2 голосов
/ 13 августа 2011

вы не должны использовать GetBuffer(), но ToArray(), поскольку последний действительно возвращает содержимое, в то время как Getbuffer() может возвращать неинициализированные байты ...

см
http://msdn.microsoft.com/en-us/library/system.io.memorystream.toarray.aspx
http://msdn.microsoft.com/en-us/library/system.io.memorystream.getbuffer.aspx

...