WPF,对象序列化或反序列化为一字符串

来源:互联网 发布:大数据案例分析 ppt 编辑:程序博客网 时间:2024/05/07 17:22
/**     * 这段代码在某网站源码的基础上改了一下     * 在VS2008 SP1中测试通过     * */    public class SerializeUtilities    {        /// <summary>        /// 序列化 对象到字符串        /// </summary>        /// <param name="obj">泛型对象</param>        /// <returns>序列化后的字符串</returns>        public static string Serialize<T>(T obj)        {            try            {                IFormatter formatter = new BinaryFormatter();                MemoryStream stream = new MemoryStream();                formatter.Serialize(stream, obj);                stream.Position = 0;                byte[] buffer = new byte[stream.Length];                stream.Read(buffer, 0, buffer.Length);                stream.Flush();                stream.Close();                return Convert.ToBase64String(buffer);            }            catch (Exception ex)            {                throw new Exception("序列化失败,原因:" + ex.Message);            }        }        /// <summary>        /// 反序列化 字符串到对象        /// </summary>        /// <param name="obj">泛型对象</param>        /// <param name="str">要转换为对象的字符串</param>        /// <returns>反序列化出来的对象</returns>        public static T Desrialize<T>(string str)        {            T obj;            try            {                IFormatter formatter = new BinaryFormatter();                byte[] buffer = Convert.FromBase64String(str);                MemoryStream stream = new MemoryStream(buffer);                obj = (T)formatter.Deserialize(stream);                stream.Flush();                stream.Close();            }            catch (Exception ex)            {                throw new Exception("反序列化失败,原因:" + ex.Message);            }            return obj;        }    }


下面是测试代码

    [Serializable]    class MyData    {        public String str;        public HashSet<String> hs;        public void Init()        {            str = "这是一个测试";            hs = new HashSet<String>();            hs.Add("我的测试字符串1");            hs.Add("我的测试字符串2");        }    }   


 

            /* 测试序列化,反序列化*/            MyData md = new MyData();            md.Init();            //序列化            String str = SerializeUtilities.Serialize<MyData>(md);                        //反序列化            MyData mdD = SerializeUtilities.Desrialize<MyData>(str) as MyData;            Debug.WriteLine("mdD=>"+mdD.str+" hs.size=>"+mdD.hs.Count);


 

0 0
原创粉丝点击