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.pswp.cn/web/91778.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 原始值与引用值

JavaScript 原始值与引用值 ECMAScript变量可以包含两种不同类型的数据&#xff1a;原始值和引用值。 原始值&#xff08;primitive value&#xff09;就是最简单的数据&#xff0c;引用值&#xff08;reference value&#xff09;则是由多个值构成的对象。 保存原始值的变量是…

linux中挂载磁盘和卸载

查找磁盘 找到你想要挂载的磁盘。可以使用lsblk或fdisk -l命令来查看系统中所有的磁盘和分区信息。 lsblk 对数据盘进行分区 在fdisk交互界面里&#xff0c;按以下步骤操作 fdisk /dev/vdb- 输入n来创建新分区。 - 按照提示设置分区的起始扇区、结束扇区等信息&#xff0c;…

java8学习笔记-Stream流

JDK1.8新增了Stream类&#xff0c;从而把函数式编程的风格引入到Java语言中&#xff0c;Stream类的API提供了强大的功能&#xff0c;使用Stream后&#xff0c;可以写出更加强大&#xff0c;更加简洁的代码首先&#xff0c;Stream流有一些特性&#xff1a;Stream流不是一种数据结…

Flutter开发 dart语言基本语法

特点 Dart语言支持JIT与AOT。 Dart语言采用单线程模型。 Dart语言是强类型编程语言&#xff0c;但是允许弱类型语言式编程。 基本语法 1.变量和常量 变量 var、object、dynamic关键字或数据类型显式声明变量。 命名规则&#xff1a; 变量名称必须由数字、字母、下划线或$组成&a…

SpringBoot:基于 Redis 自定义注解实现后端接口防重复提交校验(幂等操作)

SpringBoot&#xff1a;基于 Redis 自定义注解实现后端接口防重复提交校验&#xff08;幂等操作&#xff09;可基于 时间间隔 和 用于幂等判断的参数名称 实现防重复提交校验 客户端发送请求 ↓ [Spring Boot 应用入口]↓ ┌─────────────────────────…

【语音技术】意图与语料

目录 1. 意图 1.1. 意图分类 1.1.1 入口意图&#xff08;Entry Intent&#xff09; 1.1.2 对话意图&#xff08;Dialog Intent&#xff09; 1.2. 意图类型切换操作步骤 2. 语料 2.1 语料分类详解 2.2 语料编写规范详解 2.3 标签符号深度说明 3. 词槽 3.1 符类型要求 …

【MySQL集群架构与实践5】使用Docker实现水平分片

目录 一. 在Docker中安装ShardingSphere 二. 实践&#xff1a;水平分片 2.1 应用场景 2.2 架构图 2.3 服务器规划 2.4 创建server-user容器 2.5 创建server-order0和server-order1容器 2.6.日志配置 2.7 数据节点配置 2.8.测试数据节点 2.8.1.测试server_order0.t_or…

视觉图像处理中级篇 [1]—— 彩色照相机的效果与预处理

在工业检测中&#xff0c;黑白相机虽应用广泛&#xff0c;但在应对颜色差异检测时往往力不从心。彩色照相机凭借其对色彩信息的精准捕捉&#xff0c;成为复杂场景下的理想选择&#xff0c;而预处理技术则进一步释放了其性能潜力。一、彩色照相机的效果检查盖子上的金色标签可以…

使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量

在构建 Retrieval-Augmented Generation&#xff08;RAG&#xff09;系统时&#xff0c;文档的切片方式至关重要。我们需要将长文本切分成合适的段落&#xff08;chunks&#xff09;&#xff0c;然后存入向量数据库进行召回。如果切得太粗&#xff0c;会丢失上下文细节&#xf…

使用STM32CubeMX生成的STM32CubeIDE工程在更改工程名后编译失败问题解决

0 问题描述 使用STM32CubeMX生成STM32CubeIDE工程,然后使用STM32CubeIDE改名后编译提示如下错误: 1 问题原因及解决办法 1.1 问题原因 原因在于更名后STM32CubeIDE没有自动更新引用关系,这是因为我们使用STM32CubeMX生成代码时没有勾选在根目录下生成: 取消勾选在根目…

8月3日星期日今日早报简报微语报早读

8月3日星期日&#xff0c;农历闰六月初十&#xff0c;早报#微语早读。1、广西防城港&#xff1a;奔驰女司机身份已查清&#xff0c;结果将统一对外发布&#xff1b;2、陈艺文、陈佳包揽游泳世锦赛女子跳水三米板金银牌&#xff1b;3、九省份保险业已赔付暴雨灾害损失5.2亿元&am…

wxPython 实践(六)对话框

wxPython 实践&#xff08;一&#xff09;概述 wxPython 实践&#xff08;二&#xff09;基础控件 wxPython 实践&#xff08;三&#xff09;页面布局 wxPython 实践&#xff08;四&#xff09;事件响应 wxPython 实践&#xff08;五&#xff09;高级控件 wxPython 实践&#x…

MATLAB科研数据可视化技术

互联网的飞速发展伴随着海量信息的产生&#xff0c;而海量信息的背后对应的则是海量数据。如何从这些海量数据中获取有价值的信息来供人们学习和工作使用&#xff0c;这就不得不用到大数据挖掘和分析技术。数据可视化分析作为大数据技术的核心一环&#xff0c;其重要性不言而喻…

文明存续的时间博弈:论地球资源枯竭临界期的技术突围与行动紧迫性

摘要当地球资源消耗以指数级速度逼近生态承载力极限&#xff0c;人类文明正面临“存续还是消亡”的终极抉择。本文基于地球资源枯竭的实证数据与技术突破的可行性分析&#xff0c;揭示文明存续的时间窗口已进入不可逆临界期&#xff08;2040-2070年&#xff09;&#xff0c;论证…

Elasticsearch 8.19.0 和 9.1.0 中 LogsDB 和 TSDS 的性能与存储改进

作者&#xff1a;来自 Elastic Martijn Van Groningen 探索 TSDS 和 LogsDB 的最新增强功能&#xff0c;包括优化 I/O、提升合并性能等。 Elasticsearch 带来了许多新功能&#xff0c;帮助你为你的使用场景构建最佳搜索解决方案。通过我们的示例笔记本深入学习&#xff0c;开始…

cs336之注意pytorch的tensor在哪里?(assert的使用)

问题 记住&#xff1a;无论何时你在pytorch中有一个张量tensor&#xff0c;你应该始终问一个问题&#xff1a;它当前位于哪里&#xff1f; 注意它在CPU还是在GPU中。要判断它在哪里&#xff0c;可以使用python的assert断言语句。 assert断言 在 Python 中&#xff0c;assert 是…

Mysql 分区表

分区表是将一张表分成多张独立子表&#xff0c;每个子表是一个区&#xff0c;目的是提高查询效率。 从 server 层来看&#xff0c;只有一张表。但是从引擎层来看&#xff0c;是多张表&#xff0c;对应多个.idb文件。引擎层访问数据只访问特定分区表&#xff0c;也只对特定分区表…

Makefile 入门与实践指南

Makefile 是用于 make 工具的配置文件&#xff0c;它定义了如何编译和链接你的项目&#xff0c;让构建过程自动化。一、核心概念 make 的核心思想是 “目标”&#xff08;Target&#xff09; 和 “依赖”&#xff08;Dependencies&#xff09;&#xff1a; 目标 (Target)&#…

分布式微服务--Nacos作为配置中心(补)关于bosststrap.yml与@RefreshScope

一、关于bosststrap.yml✅ bootstrap.yml 和 application.yml 的区别对比项bootstrap.ymlapplication.yml加载时机优先于 application.yml 加载&#xff08;启动早期&#xff09;程序初始化完成后加载主要用途设置应用的外部配置源、注册中心信息等设置应用内部配置&#xff0c…

[Qt]QString 与Sqlite3 字符串互动[汉字不乱码]

环境&#xff1a;Qt C&#xff08;msvc c&#xff09;1.将与数据库交互的代码文件编码转换为utf-8-bom编码&#xff0c;&#xff08;可使用notepad 进行转换&#xff09;2.在代码文件头文件中加上下面代码。//vs2010 版本是 1600 #if defined(_MSC_VER) && (_MSC_VER &…