码迷,mamicode.com
首页 > Windows程序 > 详细

C# 序列化、反序列化

时间:2015-03-13 15:54:07      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

刚刚碰巧群里有人问这个问题,而之前的博客中并没有提及,打算弄一篇博客简单提及一下这个知识点。

MSDN文档中提及了序列化、反序列化的概念,这里引用一下。

序列化:将对象状态转换为可保持或传输的形式的过程。

反序列化:是序列化的逆过程,就是将流转换为对象的过程。

这两个过程一起保证数据易于传输和存储。

详细的请参考:http://msdn.microsoft.com/zh-cn/library/7ay27kt9(v=vs.100).aspx

 

下面直接给出完整的代码,该代码演示了如何序列化一个对象以及反序列化(还原对象)的过程。

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Object student = new Student() { StudentID = "007", StudentName = "guwei4037" };

            string result = ObjectToString<Object>(student);
            Console.WriteLine(result + "\r\n");

            Student newResult = StringToObject<Student>(result);
            Console.WriteLine("ID:{0}, Name:{1}", newResult.StudentID, newResult.StudentName);
        }

        /// <summary>
        /// 对象转字符串(序列化后转Base64编码字符串)
        /// </summary>
        /// <param name="obj">对象</param>
        /// <returns>字符串</returns>
        public static string ObjectToString<T>(T obj)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream, obj);
                stream.Position = 0;
                byte[] buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                return Convert.ToBase64String(buffer);
            }
        }

        /// <summary>
        /// 字符串转对象(Base64编码字符串反序列化为对象)
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns>对象</returns>
        public static T StringToObject<T>(string str)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                byte[] bytes = Convert.FromBase64String(str);
                stream.Write(bytes, 0, bytes.Length);
                stream.Position = 0;
                IFormatter formatter = new BinaryFormatter();
                return (T)formatter.Deserialize(stream);
            }
        }
    }

    /// <summary>
    /// 可序列化的类,用Serializable标示此类可序列化
    /// </summary>
    [Serializable]
    public class Student
    {
        public string StudentID { get; set; }
        public string StudentName { get; set; }
    }
}

  

运行结果截图:

技术分享

C# 序列化、反序列化

标签:

原文地址:http://www.cnblogs.com/guwei4037/p/4334978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!