/// <summary> /// 用于序列化和反序列化的工具类 /// </summary> /// <typeparam name="T">要序列化或反序列化的类</typeparam> public sealed class Serializer<T> { /// <summary> /// 将类的实例序列化为xml字符串 /// </summary> /// <param name="instance"></param> /// <returns></returns> public static string SerializeToXml(T instance) { //序列化 string xmlString = String.Empty; XmlSerializer xmlSerializer = new XmlSerializer(instance.GetType()); MemoryStream stream = new MemoryStream(); xmlSerializer.Serialize(stream, instance); byte[] buf = stream.ToArray(); xmlString = Encoding.ASCII.GetString(buf); stream.Close(); return xmlString; } /// <summary> /// 将xml字符串反序列化为类的实例 /// </summary> /// <param name="xmlString"></param> /// <returns></returns> public static T DeserializeFromXml(string xmlString) { //反序列化 T obj = default(T); XmlSerializer xmlSerializer = new XmlSerializer(typeof(T)); byte[] buf = Encoding.ASCII.GetBytes(xmlString); MemoryStream stream = new MemoryStream(buf); obj = (T)xmlSerializer.Deserialize(stream); stream.Close(); return obj; } /// <summary> /// 将类的实例序列化为二进制数据,保存到字节数组中 /// </summary> /// <param name="instance"></param> /// <returns></returns> public static List<byte> SerializeToBinary(T instance) { List<byte> byteList = new List<byte>(); IFormatter formatter = new BinaryFormatter(); Stream stream = new MemoryStream(); formatter.Serialize(stream, instance); //stream.Seek(0, SeekOrigin.Begin);//将流的查找字段设置为流的开头 stream.Position = 0; if (stream.Length > 0) { byte[] buffer = new byte[stream.Length]; stream.Read(buffer, 0, Convert.ToInt32(stream.Length)); byteList.AddRange(buffer); } stream.Close(); return byteList; } /// <summary> /// 将二进制的字节数组反序列化为类的实例 /// </summary> /// <param name="dataByteList"></param> /// <returns></returns> public static T DeserializeFromBinary(List<byte> dataByteList) { T obj = default(T); Stream stream = null; //反序列化过程开始 IFormatter formatter = new BinaryFormatter(); //stream = new MemoryStream(dataByteList.Count); //stream.Write(dataByteList.ToArray(), 0, dataByteList.Count); ////stream.Seek(0, SeekOrigin.Begin); //stream.Position = 0; //本句等效于上面一句 stream = new MemoryStream(dataByteList.ToArray()); //该句可替代上面三句 obj = (T)formatter.Deserialize(stream); stream.Close(); return obj; } }