public class CompressPageStatePersister:PageStatePersister
{
private string pagestateKey = "__VIEWSATE";
public CompressPageStatePersister(Page p):base(p)
{
}
public override void Save()
{
if (!Page.EnableViewState)
{
this.ViewState = null;
}
if (this.ViewState !=null || this.ControlState != null)
{
Pair state = new Pair(ViewState, ControlState);
var str = CompressHelp.Compress(state);
Page.ClientScript.RegisterHiddenField(this.pagestateKey, str);
}
}
public override void Load()
{
string postbackState = Page.Request.Form[pagestateKey];
if (!string.IsNullOrEmpty(postbackState))
{
Pair statePair =(Pair) CompressHelp.Decompress(postbackState);
if (!Page.EnableViewState)
{
this.ViewState = null;
}
else
{
this.ViewState = statePair.First;
}
this.ControlState = statePair.Second;
}
}
}
public class CompressHelp
{
private static LosFormatter formatter = new LosFormatter();
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();
stateString = Convert.ToBase64String(buffer);
return stateString;
}
public static object Decompress(string stateString)
{
byte[] buffer = Convert.FromBase64String(stateString);
MemoryStream ms = new MemoryStream();
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);
}
}
{
private string pagestateKey = "__VIEWSATE";
public CompressPageStatePersister(Page p):base(p)
{
}
public override void Save()
{
if (!Page.EnableViewState)
{
this.ViewState = null;
}
if (this.ViewState !=null || this.ControlState != null)
{
Pair state = new Pair(ViewState, ControlState);
var str = CompressHelp.Compress(state);
Page.ClientScript.RegisterHiddenField(this.pagestateKey, str);
}
}
public override void Load()
{
string postbackState = Page.Request.Form[pagestateKey];
if (!string.IsNullOrEmpty(postbackState))
{
Pair statePair =(Pair) CompressHelp.Decompress(postbackState);
if (!Page.EnableViewState)
{
this.ViewState = null;
}
else
{
this.ViewState = statePair.First;
}
this.ControlState = statePair.Second;
}
}
}
public class CompressHelp
{
private static LosFormatter formatter = new LosFormatter();
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();
stateString = Convert.ToBase64String(buffer);
return stateString;
}
public static object Decompress(string stateString)
{
byte[] buffer = Convert.FromBase64String(stateString);
MemoryStream ms = new MemoryStream();
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);
}
}