C# JSON之序列化与反序列化

在C#中,JSON(JavaScript Object Notation)序列化与反序列化是将对象转换成JSON格式的字符串表示,以及从JSON字符串还原为对象的过程。

首先要添加引用NuGet包,Newtonsoft.Json,通过此工具可对Json对象进行序列化与反序列化。当然还可通过其它方式,这里的话只介绍这一种方法。

JSON 序列化

序列化是指将C#对象转换为JSON字符串。

// 引用 Newtonsoft.Json 包
using Newtonsoft.Json;

// 假设我们有一个类
public class Skill
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int Damage { get; set; }
}

// 创建一个实例对象
Skill mySkill = new Skill
{
    ID = 1,
    Name = "Fireball",
    Damage = 50
};

// 序列化为JSON字符串
string json = JsonConvert.SerializeObject(mySkill);

// 输出:{"ID":1,"Name":"Fireball","Damage":50}

JSON 反序列化

反序列化则是将JSON字符串转换回C#对象。

// JSON 字符串
string jsonString = "{\"ID\":1,\"Name\":\"Fireball\",\"Damage\":50}";

// 反序列化为C#对象
Skill deserializedSkill = JsonConvert.DeserializeObject<Skill>(jsonString);

// 现在deserializedSkill变量包含了与原始mySkill相同的属性值

注意事项

  • 类中的属性名称必须与JSON键对应,否则在默认情况下无法正确映射。
  • 可以通过数据注解来自定义序列化和反序列化的行为,比如忽略某些属性、改变键名等。
  • Newtonsoft.Json支持.NET Framework和.NET Core等多种平台上的项目,并且提供了丰富的API来处理复杂的数据结构,包括数组、嵌套对象、匿名类型等。

示例如下

参照C# Json之序列化与反序列化

1.反序列化Json字符串

string str = "{\"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\"},{\"id\":2,\"Name\":\"is Java\",\"Number\":\"A-003\",\"Date\":\"2019-08-04\"}]}";

我们可以对这个Json字符串进行刨析,从而建立类。

如果想更清晰的看清这个Json对象的结构,可将这个Json字符串复制出来,在搜索引擎中输入Json

随便选择任何一个,将上面那个Json字符串输入进去,它的结构便一目了然

 话不多说,建立两个类 Message、Datas

  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; }
    }

关键代码:

Message message = JsonConvert.DeserializeObject<Message>(str);

我们可以查看它的详细信息

右键点击message,选择快速监视

此时反序列化已经成功,

2.序列化对象

我们可就Datas类作为序列化的对象

文本可视化工具查看Serializedata对象:

 3.也可对集合进行序列化与反序列化

var DataList = new List<Datas>();
DataList.Add(new Datas
{
    id = 1,
    Name = "aggregate",
    Number = "A1",
    Date = "2019-08-01"
});
//序列化
string SerializeDataList = JsonConvert.SerializeObject(DataList);

文本可视化工具查看SerializeDataList对象:

 反序列化实体对象集合:

//反序列化实体对象集合
string 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\"},{\"id\":2,\"Name\":\"is Java\",\"Number\":\"A-003\",\"Date\":\"2019-08-04\"}]";
//关键代码
var DeserializeData = JsonConvert.DeserializeObject<List<Datas>>(Data);

可查看DeserializeData对象其详细信息:

上面只是列举了一些简单例子,Newtonsoft.Json 库提供了更多的选项和功能,可以根据需要进行配置和定制序列化/反序列化行为,具体的以实际开发为主。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
C#提供了丰富的工具和库来实现Json数据的序列化反序列化。在这方面,常用的方法有两种:使用Json.NET库和使用System.Text.Json命名空间下的类来实现。 首先,让我们来看看如何使用Json.NET库进行Json数据的序列化反序列化。引用提到了这个库。Json.NET是一个功能强大且广泛使用的Json处理库,可以在NuGet包管理器中获取到。下面是一个简单的示例代码: ```csharp // 引入Newtonsoft.Json命名空间 using Newtonsoft.Json; // 定义一个示例类 public class Person { public string Name { get; set; } public int Age { get; set; } } // 序列化对象Json字符串 Person person = new Person { Name = "Alice", Age = 30 }; string jsonStr = JsonConvert.SerializeObject(person); // 反序列化Json字符串到对象 Person deserializedPerson = JsonConvert.DeserializeObject<Person>(jsonStr); ``` 以上示例演示了如何将一个Person对象序列化Json字符串,以及如何将Json字符串反序列化为Person对象。使用Json.NET库的优点是它提供了丰富的功能和灵活的配置选项。 另一种方法是使用.NET Core 3.0及以上版本提供的System.Text.Json命名空间下的类来实现Json数据的序列化反序列化。这种方法不需要额外的第三方库,可以直接使用系统提供的类。下面是一个示例代码: ```csharp // 引入System.Text.Json命名空间 using System.Text.Json; // 定义一个示例类 public class Person { public string Name { get; set; } public int Age { get; set; } } // 序列化对象Json字符串 Person person = new Person { Name = "Alice", Age = 30 }; string jsonStr = JsonSerializer.Serialize(person); // 反序列化Json字符串到对象 Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonStr); ``` 以上示例演示了如何使用System.Text.Json命名空间下的类将一个Person对象序列化Json字符串,以及如何将Json字符串反序列化为Person对象。使用System.Text.Json的优点是它是一个轻量级的库,对于简单的Json操作足够方便。 综上所述,C#提供了多种方法来实现Json文件的序列化反序列化,包括使用Json.NET库和System.Text.Json命名空间下的类。具体使用哪种方法取决于你的需求和项目的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangnaisheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值