当前位置: 首页 > news >正文

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

程序运行结果

写入成功:

http://www.dtcms.com/a/310418.html

相关文章:

  • MySQL 45 讲 18-20
  • React 19 革命性升级:编译器自动优化,告别手动性能调优时代
  • 携程PMO资深经理、携程技术委员会人工智能委员会秘书陈强受邀为PMO大会主持人
  • 开源vGPU解决方案HAMi
  • 2025.8.1
  • python中appium 的NoSuchElementException错误 原因以及解决办法
  • C++基础语法
  • Redis实战(5)-- 高级数据结构 HyperLogLog
  • 调整Idea缓存目录,释放C盘空间
  • UniApp与WebView双向通信机制及生产级实现方案全解析
  • 振动波形转音频播放并做声纹聚类
  • 【数据分享】南海综合波浪数据(1945-2018 年)(获取方式看文末)
  • 【历史人物】【王安石】简历与生平
  • win11怎么看本机ip地址?怎么查看代理端口?
  • SAP Datasphere 03 - 数据权限
  • OpenShift AI - 用 Hardware profiles 为运行环境分配可用的硬件规格
  • 什么是股指期货的不对冲策略?
  • 【Flutter】内存泄漏总结
  • HarmonyOS 应用拉起系列(一):应用与元服务互通方式
  • 哔哩哔哩Android视频编辑页的架构升级
  • 二进制数本身没有默认的有符号或无符号解释
  • Eden 和 Survivor 比例可以调整么,参数是什么?还用到了哪些参数?
  • 数新智能 CTO 原攀峰:DataCyber 面向 AI 时代的多模态数据湖设计与实践
  • MYSQL:JDBC编程
  • C语言笔记4:错题整理
  • QT开发---图形与图像(补充)
  • ZYNQ与MPSoC实战:从Vitis入门到项目开发
  • Java学习-运算符
  • HRM论文解读
  • Windows安装虚拟机遇到内容解码失败