using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.JScript;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace _02序列化与反序列化_二进制_
{
class Program
{
static void Main(string[] args)
{
Person p = new Person();
p.Name = "道道道";
p.Age = 2500;
p.Email = "yuzhou@test.com";
/*序列化只序列化数据(对象的属性,字段)
*只改变了数据的格式,对数据进行了格式化,并没有改变数据中的内容
* 有序列化就有反序列化
*/
//json序列化
JavaScriptSerializer json = new JavaScriptSerializer();
string strjson = json.Serialize(p);
Console.WriteLine(strjson);
//xml序列化
XmlSerializer xml = new XmlSerializer(typeof(Person));
using (FileStream fs =new FileStream("xmlperson.xml",FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
xml.Serialize(fs, p);
}
Console.WriteLine("ok");
//二进制序列化
//把对象转变为流的过程(字节 byte [] )
//将对象序列化保存到磁盘上
/*
注意事项:
二进制序列化时被序列化的对象必须有[Serializable]标记
被序列化的对象的父类也必须标记[Serializable]
*/
//1.创建序列化器
BinaryFormatter binaryformatter = new BinaryFormatter();
//2开始执行序列化
using (FileStream fs=new FileStream("BinaryFormatter.txt",FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
binaryformatter.Serialize(fs, p);
}
Console.WriteLine("二进制序列化完毕");
Console.ReadKey();
}
}
//标记表示可以被序列化
[Serializable]
public class Person :Animal
{
public string Name { get; set; }
public int Age { get; set; }
public string Email { get; set; }
}
[Serializable]
public class Animal
{
public void Eat()
{
}
}
}