C# _Json数据
目录
1、添加Json库
2、数据序列化(对象转 JSON)和反序列化(JSON 转对象)操作
3、序列化 创建和读取Json数据
创建Json数据 定义一个CreateJson方法
读取 解析 Json数据 定义一个ReadJson方法
4、程序运行结果
在 C# 中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于数据序列化(对象转 JSON)和反序列化(JSON 转对象)操作。
特点类别 | 具体说明 |
---|---|
数据格式 | 由键值对、数组、字符串、数字、布尔值和 null 组成,结构简洁易读,便于解析 |
核心功能 | 序列化:将 C# 对象转换为 JSON 字符串(便于存储 / 传输) 反序列化:将 JSON 字符串转换为 C# 对象(便于程序处理) |
主流处理库 | System.Text.Json:.NET 内置官方库,性能优异,支持多数基础和中等复杂度场景 Newtonsoft.Json(Json.NET):第三方库,功能丰富,兼容性强,适合复杂场景(如自定义转换) |
类型映射 | 需保证 C# 类属性与 JSON 字段在名称、类型上匹配,支持自定义映射配置 |
结构支持 | 可处理嵌套对象、多层数组等复杂 JSON 结构,满足多样化数据表示需求 |
可配置性 | 支持自定义序列化选项(如日期格式、大小写转换、忽略空值等) |
1、添加Json库
点击VS中的解决方案资源管理器,右键项目,选中项目中的管理NuGet程序包
点击浏览,搜索Json,下载下图这个最新版本的Newtonsoft.Json
点击应用
点击已安装查看,安装成功
这个Json库的官网手册链接:Json.NEThttps://www.newtonsoft.com/json/help/html/Introduction.htm#!
2、数据序列化(对象转 JSON)和反序列化(JSON 转对象)操作
首先创建一个Student类
internal class Student{public string Name { get; set; }public int Id { get; set; }public bool Sex { get; set; }public string Address { get; set; }public Student(string name, int id, bool sex, string address){Name = name;Id = id;Sex = sex;Address = address;}}
创建一个Student类的对象stu1,将对象序列化为Json对象 并将对象中的数据 转化为Json数据储存在字符串ObjJson 中。
JsonConvert.SerializeObject
是第三方库 Newtonsoft.Json(Json.NET) 提供的核心方法,用于将 C# 对象序列化为 JSON 字符串。
Student stu1 = new Student("李四", 000000, true, "河南省郑州市高新区");
//将对象 序列化为Json对象 将对象中的数据 转化为Json数据
string ObjJson = JsonConvert.SerializeObject(stu1);
解析对象 反序列化 就是将Json数据 转回为原有类型
JsonConvert.DeserializeObject
是 Newtonsoft.Json(Json.NET)库中用于将 JSON 字符串反序列化为 C# 对象
Student stu = JsonConvert.DeserializeObject<Student>(ObjJson);
//打印解析出的数据
Console.WriteLine(stu);
Console.WriteLine(stu.Name);
Console.WriteLine(stu.Id);
Console.WriteLine(stu.Sex);
Console.WriteLine(stu.Address);
将对象的数据存储在文件中
将stu对象的数据 转化为字符串str1存在文件Json数据1.txt中
string path1 = Directory.GetCurrentDirectory() + "\\Json数据1.txt";string str1 = stu.ToString();using (StreamWriter sw = new StreamWriter(path1, false)){sw.WriteLine(stu);}
3、序列化 创建和读取Json数据
主函数
//路径默认运行文件夹 \bin\Debug\net8.0
string path = Directory.GetCurrentDirectory() + "\\Json数据.txt";
//序列化 创建Json数据
CreateJson(path);
//读取Json数据
ReadJson(path);
创建Json数据 定义一个CreateJson方法
public static void CreateJson(string path) {//创建一个Json对象JObject J = new JObject();// 添加数据{ "name":"张三", "id" : 123456 ,"sex":"男" ,"Color" : ["red","blue","yellow"]}//第一种向Json对象中添加数据的方式 索引器J["name"] = "张三";J["id"] = 123456;// 第二种添加数据的方式 AddJ.Add("sex", "男");//第三种 创建一个Json数组 使用Add添加JArray Ja = new JArray();Ja.Add("red");Ja.Add("blue");Ja.Add("yellow");J.Add("Color", Ja);//键为Color 值为Ja Json数组
其中,JArray
是 Newtonsoft.Json(Json.NET)库中用于处理 JSON 数组的核心类,继承自JContainer
,实现了IEnumerable<JToken>
接口。它允许开发者在不预先定义实体类的情况下,灵活地创建、解析、修改和查询 JSON 数组,是处理动态或未知结构 JSON 数据的重要工具。将Json对象的数据 转化为字符串写入 Json数据.txt 文件中
//将Json对象的数据 转化为字符串string str = J.ToString();using (StreamWriter sw = new StreamWriter(path, false)){sw.WriteLine(str);} }
读取 解析 Json数据 定义一个ReadJson方法
public static void ReadJson(string path) {string strjson;// 读取Json数据的文件using (StreamReader sr = new StreamReader(path)){//ReadToEnd 一次性读取流或文本中的所有剩余内容,并以字符串形式返回。strjson = sr.ReadToEnd();}//将Json数据格式的字符串 转化为Json对象JObject J = JObject.Parse(strjson);
提取数据
解析出来之后 使用的话就接收 如果只是看一下数据 直接打印即可
//引用键,将值转换为字符串打印string name = J["name"].ToString();Console.WriteLine(name);Console.WriteLine(J["id"]);Console.WriteLine(J["sex"]);Console.WriteLine(J["Color"]);//正确读取键Color中的值 Json数组的内容foreach (var item in J["Color"]){Console.WriteLine(item);}//创建一个数组接收键Color的值,键Color的值是一个数组,这里就相当于数组里面套数组JArray ja = new JArray(J["Color"]);//[["red","blue","yellow"]] 形成了多维数组了//这里遍历只有一个内容 ["red","blue","yellow"]foreach (var item in ja){Console.WriteLine(item);} }
程序运行结果
写入成功: