在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来处理复杂的数据结构,包括数组、嵌套对象、匿名类型等。
示例如下
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 库提供了更多的选项和功能,可以根据需要进行配置和定制序列化/反序列化行为,具体的以实际开发为主。