序列化和反序列化的工具类

View Code
    /// <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;
        }
    }

序列化和反序列化的工具类 

posted @ 2012-05-04 14:31  superstar  阅读(269)  评论(0)    收藏  举报