public byte[] GetDataSetSurrogateZipBytes()//压缩 
        { 
            DataSet DS 
= GetDataSet(); 
            DataSetSurrogate dss 
= new DataSetSurrogate(DS); 
            BinaryFormatter ser 
= new BinaryFormatter(); 
            MemoryStream ms 
= new MemoryStream(); 
            ser.Serialize(ms, dss); 
            
byte[] buffer = ms.ToArray(); 
            
byte[] Zipbuffer = Compress(buffer); 
            
return Zipbuffer; 
        } 
        
public byte[] Compress(byte[] data)//压缩方法 
        { 
            MemoryStream ms 
= new MemoryStream(); 
            Stream zipStream 
= null
            zipStream 
= new GZipStream(ms, CompressionMode.Compress, true); 
            zipStream.Write(data, 
0, data.Length); 
            zipStream.Close(); 
            ms.Position 
= 0
            
byte[] compressed_data = new byte[ms.Length]; 
            ms.Read(compressed_data, 
0int.Parse(ms.Length.ToString())); 
            
return compressed_data; 
        } 
//使用 
private void button4_Click(object sender, EventArgs e) 
        { 
            
//调用Web Service的方法 
            com.dzbsoft.www.DataSetService ds = new Test.com.dzbsoft.www.DataSetService(); 
            DateTime dtBegin 
= DateTime.Now; 
            
byte[] zipBuffer = ds.GetDataSetSurrogateZipBytes(); 
            
byte[] buffer = UnZipClass.Decompress(zipBuffer); 
            BinaryFormatter ser 
= new BinaryFormatter(); 
            DataSetSurrogate dss 
= ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate; 
            DataSet dataset 
= dss.ConvertToDataSet(); 
            
this.label4.Text = string.Format("耗时:{0}", DateTime.Now - dtBegin + "          " + zipBuffer.Length.ToString()); 
            BindDataSet(dataset); 
        } 
public static byte[] Decompress(byte[] data) 
        { 
            
try 
            { 
                MemoryStream ms 
= new MemoryStream(data); 
                Stream zipStream 
= null
                zipStream 
= new GZipStream(ms, CompressionMode.Decompress); 
                
byte[] dc_data = null
                dc_data 
= EtractBytesFormStream(zipStream, data.Length); 
                
return dc_data; 
            } 
            
catch 
            { 
                
return null
            } 
        } 

        
public static byte[] EtractBytesFormStream(Stream zipStream, int dataBlock) 
        { 
            
try 
            { 
                
byte[] data = null
                
int totalBytesRead = 0
                
while (true
                { 
                    Array.Resize(
ref data, totalBytesRead + dataBlock + 1); 
                    
int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock); 
                    
if (bytesRead == 0
                    { 
                        
break
                    } 
                    totalBytesRead 
+= bytesRead; 
                } 
                Array.Resize(
ref data, totalBytesRead); 
                
return data; 
            } 
            
catch 
            { 
                
return null
            } 
        }