一、序列化的三种方式
本来C++学的好好的,工作需要又要学C#
为啥要序列化
1、数据持久化
2、数据传输
3、跨平台和语言交互
序列化的三种方式
二进制序列化:
就是将对象或者数据列为二进制的格式,将所有的内容都会序列化,常用于socket 流
XML序列化
使用XMLSerializer类将数据放到xml 中,可读性更强但是数据量比较大
Json 序列化
同理就是使用JsonSerializer将对象或者类写入成json格式,比较紧凑,使用于传输,现在经常用于web传输数据
二、BinaryFormatter序列化
[Serializable] // 可以序列化
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
byte[] serdata;
Person person = new Person { Name="Alse",Age=34};
// 二进制序列化
BinaryFormatter formater = new BinaryFormatter();
using (MemoryStream stream=new MemoryStream())
{
formater.Serialize(stream,person);
serdata = stream.ToArray();
}
using (MemoryStream stream=new MemoryStream(serdata))
{
Person dp = (Person)formater.Deserialize(stream);
}
}
}
三、XML序列化
//===========================================================================================================
// XML序列化
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person));
using (TextWriter write=new StreamWriter("person.xml"))
{
xmlSerializer.Serialize(write,person);
}
// XML反序列化
using (TextReader reader=new StreamReader("person.xml"))
{
Person p = (Person)xmlSerializer.Deserialize(reader);
}
Application.Run(new Form1());
}
四、Json 序列化
.NET中的序列化和反序列化详解 - 重庆熊猫 - 博客园 (cnblogs.com)
// Json序列化
string Jsonstring = JsonConvert.SerializeObject(person);
var des = JsonConvert.DeserializeObject(Jsonstring);
//
Student student = new Student { Name="albert",Age=28,Id=1234566};
//序列化数据
//新建文件流
string filePath = @".\student.json";
using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate))
{
//新建序列化对象
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(Student));
//进行序列化
dataContractJsonSerializer.WriteObject(fileStream, student);
}
// 反序列化
//新建文件流
using (FileStream fileStream1 = new FileStream(filePath, FileMode.Open))
{
//新建序列化对象
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(Student));
//进行反序列化
Student student1 = (Student)dataContractJsonSerializer.ReadObject(fileStream1);
}