在C#中,序列化是指将内存中的对象转换为字节流、JSON或XML等格式,以便保存到文件、数据库或通过网络发送;反序列化则是将这些格式重新还原为对象。理解它们有助于我们处理数据持久化和服务间通信。

常见的序列化方式
C#里主流的序列化手段有二进制序列化、JSON序列化和XML序列化。下面分别说明。
1. 二进制序列化
使用BinaryFormatter可将对象转为二进制,体积小但耦合强,需注意类型版本变化。
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class User
{
public string Name;
public int Age;
}
class Program
{
static void Main()
{
User u = new User { Name = "Tom", Age = 20 };
// 序列化
BinaryFormatter bf = new BinaryFormatter();
using (FileStream fs = new FileStream("user.dat", FileMode.Create))
{
bf.Serialize(fs, u);
}
// 反序列化
using (FileStream fs = new File.OpenRead("user.dat"))
{
User ru = (User)bf.Deserialize(fs);
Console.WriteLine(ru.Name);
}
}
}
2. JSON序列化
借助System.Text.Json可轻松完成,跨平台友好,适合Web接口。
using System;
using System.Text.Json;
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
User u = new User { Name = "Tom", Age = 20 };
string json = JsonSerializer.Serialize(u);
User ru = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(ru.Name);
}
}
3. XML序列化
使用XmlSerializer要求对象有公开无参构造,且不支持私有字段直接序列化。
using System;
using System.IO;
using System.Xml.Serialization;
public class User
{
public string Name;
public int Age;
}
class Program
{
static void Main()
{
User u = new User { Name = "Tom", Age = 20 };
XmlSerializer xs = new XmlSerializer(typeof(User));
using (FileStream fs = new FileStream("user.xml", FileMode.Create))
{
xs.Serialize(fs, u);
}
using (FileStream fs = new File.OpenRead("user.xml"))
{
User ru = (User)xs.Deserialize(fs);
Console.WriteLine(ru.Name);
}
}
}
如何选择
如果只在信任的.NET程序间传数据,二进制方便;若需对接前端或其他语言,JSON更合适;旧系统对接可用XML。注意在代码里提到的<input>这种标签名只是举例,并非真实调用。
| 方式 | 优点 | 缺点 |
|---|---|---|
| 二进制 | 体积小速度快 | 跨平台差 |
| JSON | 通用易读 | 无类型信息 |
| XML | 结构清晰 | 冗余大 |
小结
掌握C#序列化和反序列化,能让你更自如地处理对象存储与传输。实际开发中推荐优先使用JSON,遇到特殊需求再考虑其余方案。