C# 中的 JSON 序列化与反序列化:使用 Newtonsoft.Json 和 System.Text.Json C#

Quibbler 1月前 189

C# 中的 JSON 序列化与反序列化:使用 Newtonsoft.Json 和 System.Text.Json


在 C# 中,JSON 序列化和反序列化是处理数据交换和持久化的常用技术。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。本文将介绍如何在 C# 中使用两种流行的库:Newtonsoft.Json 和 System.Text.Json,来实现 JSON 的序列化和反序列化。


1. 使用 Newtonsoft.Json

Newtonsoft.Json(也称为 Json.NET)是一个非常流行的 JSON 框架,提供了强大的功能和灵活性

安装 Newtonsoft.Json

在 Visual Studio 中,可以通过 NuGet 包管理器安装 Newtonsoft.Json:
bash复制
Install-Package Newtonsoft.Json

JSON 序列化

将 C# 对象转换为 JSON 字符串:
csharp复制
using Newtonsoft.Json;public class Skill{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Damage { get; set; }}var mySkill = new Skill { ID = 1, Name = "Fireball", Damage = 50 };string json = JsonConvert.SerializeObject(mySkill);Console.WriteLine(json);

JSON 反序列化

将 JSON 字符串转换回 C# 对象:
csharp复制
string jsonString = "{\"ID\":1,\"Name\":\"Fireball\",\"Damage\":50}";Skill deserializedSkill = JsonConvert.DeserializeObject<Skill>(jsonString);Console.WriteLine(deserializedSkill.Name);

注意事项

  • 类中的属性名称必须与 JSON 键对应,否则在默认情况下无法正确映射。
  • 可以通过数据注解来自定义序列化和反序列化的行为,比如忽略某些属性、改变键名等


2. 使用 System.Text.Json

System.Text.Json 是 .NET Core 3.0 及更高版本中引入的高性能 JSON 库

JSON 序列化

将 C# 对象转换为 JSON 字符串:
csharp复制
using System.Text.Json;public class Person{
    public string Name { get; set; }
    public int Age { get; set; }}var person = new Person { Name = "Alice", Age = 30 };string json = JsonSerializer.Serialize(person);Console.WriteLine(json);

JSON 反序列化

将 JSON 字符串转换回 C# 对象:
csharp复制
string jsonString = "{\"Name\":\"Alice\",\"Age\":30}";Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonString);Console.WriteLine(deserializedPerson.Name);

自定义序列化和反序列化

System.Text.Json 提供了强大的自定义功能。例如,可以通过 JsonSerializerOptions 来配置序列化和反序列化的行为。


3. 示例:处理复杂 JSON 数据

假设有以下 JSON 数据:
JSON复制
{
  "success": true,
  "msg": "获取成功",
  "data": [
    { "id": 0, "Name": "is C#", "Number": "A-001", "Date": "2019-08-02" },
    { "id": 1, "Name": "is Golang", "Number": "A-002", "Date": "2019-08-03" }
  ]}
可以定义对应的 C# 类:
csharp复制
public class Message{
    public bool success { get; set; }
    public string msg { get; set; }
    public List<Datas> data { get; set; }}public class Datas{
    public int id { get; set; }
    public string Name { get; set; }
    public string Number { get; set; }
    public string Date { get; set; }}
然后使用 Newtonsoft.Json 或 System.Text.Json 进行反序列化:
csharp复制
string jsonString = File.ReadAllText("data.json");Message message = JsonConvert.DeserializeObject<Message>(jsonString);Console.WriteLine(message.msg);


4. 性能比较

  • Newtonsoft.Json:功能丰富,支持复杂的自定义行为,但在性能上可能不如 System.Text.Json。
  • System.Text.Json:性能优化,适合高性能场景,但自定义功能相对有限。


总结

在 C# 中,Newtonsoft.Json 和 System.Text.Json 都是处理 JSON 数据的强大工具。Newtonsoft.Json 提供了更多的功能和灵活性,适合需要复杂自定义的场景;而 System.Text.Json 则提供了更高的性能,适合高性能要求的场景。根据你的具体需求选择合适的库。


不忘初心的阿甘
最新回复 (0)
    • 安卓笔记本
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com