0

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

serializeメソッドは正常に機能しますが、deserializeメソッドは次のエラーを生成します。

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

私は過去にこの方法が機能するようになったと99%確信していますが、何が悪いのかはわかりません。

4

1 に答える 1

2

使用しないでください。GetBuffer()ただしToArray()、後者は実際にはコンテンツを返しますが、初期化されGetbuffer()ていないバイトを返す可能性があるためです。


http://msdn.microsoft.com/en-us/library/system.io.memorystream.toarray.aspxhttp://msdn.microsoft.com/en-us/library/system.io.memorystream.getbufferを参照して
ください。 aspx

于 2011-08-12T20:30:38.950 に答える