DataSet序列化和反序列化

在WCF传输中,如果传输DataSet对象,一旦row很多,比如12000条时,传输就很慢了因为DataSet默认是以XML形式存在的,占用的传输量比较大,压缩一下可以瘦身很多,这样对于网络传输的瓶颈是个很好的解决方式

using System;
using System.IO;
using System.Data;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

namespace XujunTest
{
    ///
    /// DataSet序列化和反序列化
    ///
    class BinaryFormat
    {
       ///
       /// DataSet序列化
       ///
       /// 需要序列化的DataSet
       ///
       public static byte[] GetBinaryFormatDataSet(DataSet ds)
       {
           //创建内存流
           MemoryStream memStream = new MemoryStream();
           //产生二进制序列化格式
           IFormatter formatter = new BinaryFormatter();
           //指定DataSet串行化格式是二进制
           ds.RemotingFormat = SerializationFormat.Binary;
           //串行化到内存中
           formatter.Serialize(memStream, ds);
           //将DataSet转化成byte[]
           byte[] binaryResult = memStream.ToArray();
           //清空和释放内存流
           memStream.Close();
           memStream.Dispose();
           return binaryResult;
       }
       ///
       /// DataSet反序列化
       ///
       /// 需要反序列化的byte[]
       ///
       public static DataSet RetrieveDataSet(byte[] binaryData)
       {
           //创建内存流
           MemoryStream memStream = new MemoryStream(binaryData);
           //产生二进制序列化格式
           IFormatter formatter = new BinaryFormatter();
           //反串行化到内存中
           object obj = formatter.Deserialize(memStream);
           //类型检验
           if (obj is DataSet)
           {
               DataSet dataSetResult = (DataSet)obj;
               return dataSetResult;
           }
           else
           {
               return null;
           }
       }

    }
}

你可能感兴趣的:(DataSet序列化和反序列化)