尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C# 序列化三种方式

C# 序列化三种方式
📅 发布时间:2026/6/21 22:16:58

序列化是啥?
就是把一个 C# 对象(比如 Person、Order)变成一串能存文件、能发网络的“字符串”或“字节”。
反序列化就是反过来,把这串东西变回对象。

为啥要干这事?

  • 存到文件(比如保存游戏进度)
  • 发给别的程序(比如 Web API 返回 JSON)
  • 缓存数据

C# 里最常用的三种方式:​XML、JSON(用 JsonConvert)、二进制​。下面全用真实文件读写来演示,不玩虚的!

本版专门用 JsonConvert​ (Newtonsoft.Json) 来做 JSON 序列化,因为很多人还在用它,而且 API 简单好记!


1. XML 序列化 —— 老派但稳定

✅ 适合场景:

  • 配置文件(比如 .config)
  • 老系统对接
  • 人类能看懂(带标签,结构清晰)

️ 怎么用?(直接读写文件!)

// 1. 定义类(必须有 public 无参构造函数!)
public class Person
{public string Name { get; set; }public int Age { get; set; }
}

➤ 序列化:对象 → 写入 XML 文件

var person = new Person { Name = "张三", Age = 25 };
var xmlSerializer = new XmlSerializer(typeof(Person));using (var writer = new StreamWriter("person.xml"))
{xmlSerializer.Serialize(writer, person);
}
Console.WriteLine("已保存到 person.xml");

➤ 反序列化:从 XML 文件 → 读回对象

var xmlSerializer = new XmlSerializer(typeof(Person));using (var reader = new StreamReader("person.xml"))
{var person = (Person)xmlSerializer.Deserialize(reader);Console.WriteLine($"读取成功:{person.Name},{person.Age}岁");
}

✅ 生成的 person.xml 能用记事本打开,清清楚楚!


2. JSON 序列化 —— 用 JsonConvert(超简单!)

✅ 为什么用 JsonConvert?

  • API 超简单:SerializeObject​ / DeserializeObject
  • 老项目标配,兼容性好
  • 功能强大(忽略 null、格式化、自定义转换等)

️ 前提:先装 NuGet 包!

  1. 在 Visual Studio:右键项目 → “管理 NuGet 程序包” → 搜索 Newtonsoft.Json → 安装
  2. 或命令行:
dotnet add package Newtonsoft.Json
  1. 代码顶部加:
using Newtonsoft.Json;

类还是那个类(不用改!)

public class Person
{public string Name { get; set; }public int Age { get; set; }
}

➤ 序列化:对象 → 写入 JSON 文件

var person = new Person { Name = "李四", Age = 30 };// 一行搞定序列化!
string json = JsonConvert.SerializeObject(person);// 写入文件
File.WriteAllText("person.json", json);
Console.WriteLine("已保存到 person.json");

➤ 反序列化:从 JSON 文件 → 读回对象

string json = File.ReadAllText("person.json");// 一行搞定反序列化!
var person = JsonConvert.DeserializeObject<Person>(json);Console.WriteLine($"读取成功:{person.Name},{person.Age}岁");

小技巧:让 JSON 更好看(带缩进)

string json = JsonConvert.SerializeObject(person, Formatting.Indented);
File.WriteAllText("person.json", json);

生成的 person.json 长这样:

{"Name": "李四","Age": 30
}

3. 二进制序列化 —— 快但“黑盒”(慎用!)

⚠️ 仅限 .NET Framework(如 4.8)!.NET Core / .NET 5+ 已废弃!

[Serializable]
public class Person
{public string Name { get; set; }public int Age { get; set; }
}

➤ 序列化到文件

var person = new Person { Name = "王五", Age = 28 };
using (var stream = new FileStream("person.dat", FileMode.Create))
{var formatter = new BinaryFormatter();formatter.Serialize(stream, person);
}
Console.WriteLine("已保存到 person.dat(乱码文件)");

➤ 从文件反序列化

using (var stream = new FileStream("person.dat", FileMode.Open))
{var formatter = new BinaryFormatter();var person = (Person)formatter.Deserialize(stream);Console.WriteLine($"读取成功:{person.Name},{person.Age}岁");
}

再强调:新项目别用!有安全风险!


三种方式对比(文件实测)

方式 库/命名空间 序列化代码 反序列化代码
XML ​System.Xml.Serialization ​xmlSerializer.Serialize(writer, obj) ​(Person)xmlSerializer.Deserialize(reader)
JSON ​Newtonsoft.Json ​JsonConvert.SerializeObject(obj) ​JsonConvert.DeserializeObject<Person>(json)
二进制 ​System.Runtime.Serialization.Formatters.Binary ​formatter.Serialize(stream, obj) ​(Person)formatter.Deserialize(stream)

实际建议(说人话)

  1. 新项目 + 想省事? → 用 JsonConvert,API 简单,文档多,社区熟。
  2. 新项目 + 追求性能? → 用 .NET 自带的 System.Text.Json(但 API 稍复杂)。
  3. 老项目? → 大概率已经在用 JsonConvert,继续用没问题。
  4. XML? → 只在对接老系统或读 .config 时用。
  5. 二进制? → 忘了它吧,除非你在修 10 年前的代码。

最后一句话总结:

​JsonConvert.SerializeObject 是最接地气的 JSON 序列化方式——一行代码搞定,文件看得见,改得了,传得动!
装个 NuGet 包,加个 using,剩下的交给它!

搞定!现在你的 person.json 就躺在项目目录里,随时能打开看!

相关新闻

  • VMware+RockyLinux+ikuai+docker+cri-docker+k8s 自用 实践笔记(一) - 详解
  • 记录安装机器/深度学习环境(conda、CUDA、pytorch)时的一些问题
  • 详细介绍:大数据毕业设计选题推荐:基于Hadoop+Spark的全球能源消耗数据分析与可视化系统

最新新闻

  • OpenClaw-ios:集成Frida与SSL Pinning绕过的iOS逆向工程工具链
  • 2026 浙江绍兴市全域彩钢瓦修缮 TOP4 权威推荐|纺织化工厂房金属屋面除锈防水喷漆企业对比 + 绍兴专属避坑指南 - 本地便民网
  • 汽车贴玻璃膜品牌费用多少?靠谱的品牌分析 - myqiye
  • DeepSeek-V4架构解析:CSA、HCA与Muon三大认知计算原语
  • AI测试不是写用例,是重构测试工程师的思考链路
  • IDOR与XSS组合攻击:从漏洞原理到账户接管的实战剖析

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号