序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,所以概念上很好理解:
- 序列化:把Java对象转换为字节序列。
- 反序列化:把字节序列恢复为原先的Java对象。
而且序列化机制从某种意义上来说也弥补了平台化的一些差异,毕竟转换后的字节流可以在其他平台上进行反序列化来恢复对象。
事情就是那么个事情,看起来很简单,不过后面的东西还不少,请往下看。
代码: 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);//反序列化