MakubeX

导航

Windows Phone 序列化和压缩

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace A_提料
{
public class XMLSerializerHelper
{
public static void Serialize(Stream streamObject, object objForSerialization)
{
if (objForSerialization == null || streamObject == null)
return;

XmlSerializer serializer = new XmlSerializer(objForSerialization.GetType());
serializer.Serialize(streamObject, objForSerialization);
}

public static object Deserialize(Stream streamObject, Type serializedObjectType)
{
if (serializedObjectType == null || streamObject == null)
return null;

XmlSerializer serializer = new XmlSerializer(serializedObjectType);
return serializer.Deserialize(streamObject);
}
}
}

序列化用的...

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.GZip;

namespace A_提料
{
public class DataCompress
{
public static byte[] 压缩(object obj)
{
byte[] tmp = ObjectToByte(obj);
return Compress(tmp);
}

public static object 解压缩(byte[] data, Type type)
{
byte[] tmp = Decompress(data);
return ByteToObject(tmp, type);
}

private static byte[] ObjectToByte(object obj)
{
byte[] binaryDataResult = null;
MemoryStream memStream = new MemoryStream();
XMLSerializerHelper.Serialize(memStream, obj);
binaryDataResult = memStream.ToArray();
memStream.Close();
memStream.Dispose();
return binaryDataResult;
}

private static object ByteToObject(byte[] data, Type type)
{
MemoryStream memStream = new MemoryStream(data);
object obj = XMLSerializerHelper.Deserialize(memStream, type);
memStream.Close();
memStream.Dispose();
return obj;
}

private static byte[] Compress(byte[] data)
{
byte[] bData;
MemoryStream ms = new MemoryStream();
GZipOutputStream stream = new GZipOutputStream(ms);
stream.Write(data, 0, data.Length);
stream.Close();
stream.Dispose();
bData = ms.ToArray();
ms.Close();
ms.Dispose();

return bData;
}

private static byte[] Decompress(byte[] data)
{
byte[] bData;
MemoryStream ms = new MemoryStream();
ms.Write(data, 0, data.Length);
ms.Position = 0;
GZipInputStream stream = new GZipInputStream(ms);
byte[] buffer = new byte[1024];
MemoryStream temp = new MemoryStream();
int read = stream.Read(buffer, 0, buffer.Length);
while (read > 0)
{
temp.Write(buffer, 0, read);
read = stream.Read(buffer, 0, buffer.Length);
}
//必须把stream流关闭才能返回ms流数据,不然数据会不完整
stream.Close();
stream.Dispose();
ms.Close();
ms.Dispose();
bData = temp.ToArray();
temp.Close();
temp.Dispose();
return bData;
}
}
}

序列化和压缩任意 object ....

需要引用一个

ICSharpCode.SharpZipLib.GZip.dll

posted on 2012-03-26 13:19  Makubex  阅读(471)  评论(0编辑  收藏  举报