public static byte [] ToBinary(AppCommand item) ... { BinaryFormatter format = new BinaryFormatter(); MemoryStream str = new MemoryStream(); format.Serialize(str, item); return str.ToArray(); } public static AppCommand FromBinary( byte [] data) ... { BinaryFormatter format = new BinaryFormatter(); MemoryStream str = new MemoryStream(data); str.Position = 0; return (AppCommand)format.Deserialize(str); } public static object Clone( object obj) ... { using (MemoryStream buffer = new MemoryStream()) ...{ ISerializationFormatter formatter = SerializationFormatterFactory.GetFormatter(); formatter.Serialize(buffer, obj); buffer.Position = 0; object temp = formatter.Deserialize(buffer); return temp; } } 实现压缩ViewState的Util类 //FromBase64String 将指定的 String(它将二进制数据编码为 base 64 数字)转换成等效的 8 位无符号整数数组 /**/ /// <summary>/// GZipCompress 的摘要说明/// </summary> public class GZipCompress ... { //序列化工具,LosFormatter是页面默认的序列器 private static LosFormatter _formatter = new LosFormatter(); /**//// <summary> /// 解压并反序列化状态内容 /// </summary> /// <param name="stateString">从客户端取回的页面状态字符串</param> /// <returns>还原后的页面状态Pair对象</returns> public static object Decompress(string stateString) ...{ //先把取回的状态字符串转回压缩后的数组 byte[] buffer = Convert.FromBase64String(stateString); //解压 MemoryStream ms = new MemoryStream(buffer); GZipStream zipStream = new GZipStream(ms, CompressionMode.Decompress); MemoryStream msReader = new MemoryStream(); buffer = new byte[0x1000]; while (true) ...{ int read = zipStream.Read(buffer, 0, buffer.Length); if (read <= 0) ...{ break; } msReader.Write(buffer, 0, read); } zipStream.Close(); ms.Close(); msReader.Position = 0; buffer = msReader.ToArray(); stateString = Convert.ToBase64String(buffer); //反序列化 return _formatter.Deserialize(stateString); } /**//// <summary> /// 序列化并压缩状态内容 /// </summary> /// <param name="state">页面状态</param> /// <returns>结果字符串</returns> public static string Compress(object state) ...{ StringWriter writer = new StringWriter(); //序列化状态 _formatter.Serialize(writer, state); //取得序列化结果 string stateString = writer.ToString(); writer.Close(); //压缩序列化状态 byte[] buffer = Convert.FromBase64String(stateString); MemoryStream ms = new MemoryStream(); GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress, true); zipStream.Write(buffer, 0, buffer.Length); zipStream.Close(); buffer = new byte[ms.Length]; ms.Position = 0; ms.Read(buffer, 0, buffer.Length); ms.Close(); //将压缩结果转成Base64字符串,以便存到页面中 stateString = Convert.ToBase64String(buffer); return stateString; }}