序列化和反序列化

132 阅读1分钟

序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,所以概念上很好理解:

  • 序列化:把Java对象转换为字节序列。
  • 反序列化:把字节序列恢复为原先的Java对象。

image

而且序列化机制从某种意义上来说也弥补了平台化的一些差异,毕竟转换后的字节流可以在其他平台上进行反序列化来恢复对象。

事情就是那么个事情,看起来很简单,不过后面的东西还不少,请往下看。

代码: Class1先创建一个

 [Serializable]
    public class Class1
    {
       
        public int id { get; set; }
        public string name { get; set; }
        public bool sex { get; set; }
    }

Class2在class1中添加数据

public class Class2
    {
        public static List<Class1> li() {
            #region 数据

            List<Class1> list = new List<Class1>();
            list.Add(new Class1()
            {
                id = 1,
                name = "仗义",
                sex = false
            });
            list.Add(new Class1()
            {
                id = 2,
                name = "张二",
                sex = false
            });
            list.Add(new Class1()
            {
                id = 3,
                name = "张三",
                sex = true
            });
            list.Add(new Class1()
            {
                id = 4,
                name = "仗义",
                sex = false
            });
            list.Add(new Class1()
            {
                id = 5,
                name = "张四",
                sex = true
            });
            return list;
            #endregion
        }

        
    }
public class Class3
    {
        public string lu { get; set; }=@"D:\新建文件夹 (2)\练习\Lian_java\";
    }

用C#使用序列化

//将数据保存到bb.txt
            List<Class1> class1s = Class2.li();
            Class3 class3 = new Class3();
            string a1 = Path.Combine(class3.lu, "aaa", @"bb.txt");//创建bb.txt文档
            using (Stream a2 = new FileStream(a1, FileMode.Create, FileAccess.ReadWrite))
            {
                //BinaryFormatter a3 = new BinaryFormatter();//使用二进制序列化
                XmlSerializer a3 = new XmlSerializer(typeof(List<Class1>));//xml序列化
                a3.Serialize(a2, class1s);//把class1s中数据经过二进制序列化添加到bb.txt文档中
            }

            //读取bb.txt中的数据
            using (Stream a4 = new FileStream(a1, FileMode.Open, FileAccess.ReadWrite))
            {
                //BinaryFormatter a5 = new BinaryFormatter();
                XmlSerializer a5 = new XmlSerializer(typeof(List<Class1>));
                a4.Position = 0;
                var a6 = a5.Deserialize(a4);
            }

            //json序列化
            List<Class1> class1s = Class2.li();
            JavaScriptSerializer jss = new JavaScriptSerializer();
            string a1= jss.Serialize(class1s);//序列化
            List<Class1> a2 = jss.Deserialize<List<Class1>>(a1);//反序列化