关于DateTime里的MinValue解决办法

关于DateTime里的MinValue
最近做重构,主要解决系统有个页面数据加载慢的问题,页面调用WebService返回一个DataTable,表中字段基本囊括了所有常用类型,返回数据大概400行。开始以为是WebService传输数据多的原因,对传输数据进行了优化,分批次传回部分数据,测试下来还是慢;然后想到将DataTable压缩传输,解决了传输慢的问题,可是发现解压缩的过程成了一个瓶颈。甚至这个过程比直接传输DataTable还慢。于是拆开每个列做成DataTable解压和传输,发现了问题所在:DataTable中有大量的DateTime类型的数据,且其值为0000-00-00,也就是DateTime.MinValue,当换成其他时间时就挺快的了。上网查了下原因,说是SOAP序列化和传输时处理0000-00-00会有异常,具体不太明白,而且我用的序列化方法是二进制序列化,应该与SOAP无关,请大神给解释下。
代码参考liyiding23,贴如下:

 public class ZipHelp
    {
        public static void Zip(DataTable dt, out string afterZip) 
        {
            IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以序列化DataSet对象
            MemoryStream unCompressMS = new MemoryStream();//创建内存流对象
            // 序列化DataTable
            formatter.Serialize(unCompressMS, dt);
            MemoryStream compressMs = new MemoryStream();
            // gzip压缩
            GZipStream gzipStream = new GZipStream(compressMs, CompressionMode.Compress, true);
            gzipStream.Write(unCompressMS.ToArray(), 0, unCompressMS.ToArray().Length);
            gzipStream.Close();
            afterZip = Convert.ToBase64String(compressMs.ToArray(), 0, compressMs.ToArray().Length); 
            compressMs.Close();
            unCompressMS.Close();
        }

        public static void UnZip(string ziped, out DataTable afterUnZip) 
        {
            byte[] buffer1 = Convert.FromBase64String(ziped);
            MemoryStream ms1 = new MemoryStream(buffer1, 0, buffer1.Length);
            ms1.Position = 0;
            MemoryStream ms2 = new MemoryStream();
            byte[] buffer2 = new byte[4096];
            int offset = 0;
            // 解压
            GZipStream gzipStream = new GZipStream(ms1, CompressionMode.Decompress);
            while ((offset = gzipStream.Read(buffer2, 0, buffer2.Length)) != 0)
            {
                ms2.Write(buffer2, 0, offset);
            }
            gzipStream.Close();
            BinaryFormatter formatter1 = new BinaryFormatter();
            ms2.Position = 0;
            // 反序列化
            afterUnZip = formatter1.Deserialize(ms2) as DataTable;
            ms2.Close();
            ms1.Close();
        }
    }

测试代码:

class Program
    {
        static void Main(string[] args)
        {
            #region 测试DateTime.MinValue解压缩效率
            DataTable dt = new DataTable();
            dt.Columns.Add("name", typeof(string));
            dt.Columns.Add("time", typeof(DateTime));
            for (int i = 0; i < 300; i++) 
            {
                dt.Rows.Add(new object[] { "hahhahhaha", DateTime.MaxValue });