Object o=formatter.Deserialize(ms);//反序列化。object里面是读的XML格式的数据
          ds = (DataSet)o;   

解决方案 »

  1.   

    这么做貌似不行,会提示说System.string不能转换为DataSet
      

  2.   


            XmlDataDocument xdd = new XmlDataDocument();
            xdd.LoadXml(o.ToString());
            DataSet ds = xdd.DataSet;
      

  3.   

    IFormatter formatter = new BinaryFormatter();
    MyObject obj = (MyObject) formatter.Deserialize(ms);
    这样不行?
      

  4.   

    序列化时的数据和Deserialize的不一致吧?
      

  5.   

    这个行了,还有个问题是object里面的数据是我从数据库导出的一张表,我把它放入DataTable后放入DataSet再导出为XML,并压缩。现在我在把它解压,然后重新读取为DataSet要如何访问到DataSet里面的Table呢,表的结构还在吗?我现在是想把导出的数据再导入数据库。
      

  6.   

    ds.Table["tablename"] //tablename表
      

  7.   

     public static void DaoChu(DataSet ds, string FilePath)
            {
                IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以序列化DataSet对象
                MemoryStream ms = new MemoryStream();//创建内存流对象
                formatter.Serialize(ms, ds.GetXml());//把DataSet对象序列化到内存流
                byte[] buffer = ms.ToArray();//把内存流对象写入字节数组
                ms.Close();//关闭内存流对象
                ms.Dispose();//释放资源
                Stream _Stream = File.Open(FilePath, FileMode.Create);//创建文件
                GZipStream gzipStream = new GZipStream(_Stream, CompressionMode.Compress, true);//创建压缩对象
                gzipStream.Write(buffer, 0, buffer.Length);//把压缩后的数据写入文件
                gzipStream.Close();//关闭压缩流,这里要注意:一定要关闭,要不然解压缩的时候会出现小于4K的文件读取不到数据,大于4K的文件读取不完整
                gzipStream.Dispose();//释放对象
                _Stream.Flush();//释放内存
                _Stream.Close();//关闭流
                _Stream.Dispose();//释放对象
            }
    这个是导出文件的
      

  8.   

      public static DataSet DaoRu(string strPath)
            {
               Stream _Stream = File.Open(strPath, FileMode.Open);//打开文件
               _Stream.Position = 0;//设置文件流的位置 
               GZipStream gzipStream = new GZipStream(_Stream, CompressionMode.Decompress);//创建解压对象
               byte[] buffer = new byte[4096];//定义数据缓冲
               int offset = 0;//定义读取位置 
               MemoryStream ms = new MemoryStream();//定义内存流 
               while ((offset = gzipStream.Read(buffer, 0, buffer.Length)) != 0)
               {
                   ms.Write(buffer, 0, offset);//解压后的数据写入内存流   
               }
               IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以反序列化DataSet对象
               ms.Position = 0;//设置内存流的位置
               DataSet ds;
               try
               {
                
                   Object o=formatter.Deserialize(ms);
                   XmlDataDocument xdd = new XmlDataDocument();
                   xdd.LoadXml(o.ToString());
                   ds = xdd.DataSet;
                  
               }
               catch(SqlException ex)
               {
                   ds = null;
               }
            
               ms.Close();//关闭内存流   
               ms.Dispose();//释放资源 
               _Stream.Flush();//释放内存
               _Stream.Close();//关闭文件流   
               _Stream.Dispose();//释放资源   
               gzipStream.Close();//关闭解压缩流   
               gzipStream.Dispose();//释放资源   
               return ds;
            }
    这个用于导入
      

  9.   

            我以前的回答放弃,是错误的DataSet ds = new DataSet();
            using (StringReader xmlSR = new StringReader(o.ToString()))
            {
                ds.ReadXml(xmlSR, XmlReadMode.InferTypedSchema); 
            }
      

  10.   

    都告诉你了啊反序列化出来的是String