C#解析JSON详解

C#解析Json详解

文章目录

  • C#解析Json详解
    • 什么是Json?
      • Json的特点
    • 常用的Json库
      • Json.NET (Newtonsoft.Json)
      • System.Text.Json
    • 实例
      • 序列化
      • 反序列化
    • 总结

什么是Json?

JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式,主要用于数据的序列化和交互。常用于Web中,其他领域也经常出现JSON的身影。

Json的特点

Json的最小单元式键值对,即Key-Value组合。它的数据结构需要满足以下条件:

  • 由键值对组成,每个键(属性名)都是一个字符串,后面跟着一个值
  • 值可以是字符串、数字、布尔值、对象、数组、null等。
  • JSON对象是由一对大括号{}包围的键值对集合,键和值之间用冒号 : 分隔。
  • JSON数组是由一对方括号 [] 包围的值的有序列表,值之间用逗号 , 分隔。

一个常规的Json如下所示;

{"name": "xiaomai","age": 30,"isStudent": false,"hobbies": ["basketball", "swimming"]
}

注意:在上面的示例中,name就是一个属性或者是键,后面跟一个:号,xiaomai 则是值,键值对必须成对出现,键值对之间需要用,隔开。

  • 字符串:
    JSON字符串必须用双引号 " 包围,而不是单引号 '

  • 数字:
    JSON支持整数浮点数

  • 布尔值:
    JSON使用truefalse表示布尔值。

  • null:
    JSON使用null表示空值或缺失的值。

  • 嵌套结构:
    JSON对象可以嵌套在其他JSON对象中,形成复杂的数据结构。数组也可以包含其他JSON值,包括对象和数组。

常用的Json库

在C#中,我们可以用这几个常用的JSON解析库来处理JSON数据;

Json.NET (Newtonsoft.Json)

Json.NET(也称为Newtonsoft.Json)是C#中最常用的JSON解析库,广泛用于处理JSON数据。

它提供了丰富的功能,包括对象序列化、反序列化、LINQ查询、处理嵌套对象和数组、自定义序列化、自定义命名策略等等。

它支持.NET框架和.NET Core,并且在开发社区中有广泛的支持和文档。

可以通过以下指令在visual studio中安装,也可以通过NuGet包管理器来安装;

Install-Package Newtonsoft.Json

System.Text.Json

System.Text.Json是.NET Core 3.0及更高版本中引入的官方JSON库。

它提供了基本的JSON序列化和反序列化功能,是.NET Core的一部分,无需额外安装。

由于是官方支持的库,因此在.NET Core应用中使用时,它具有性能和可移植性方面的优势。
安装方式:
System.Text.Json是.NET Core的一部分,不需要额外的安装。

实例

本文主要介绍Json.NET 的使用以及操作;

序列化

序列化就是将对象转换为JSON字符串;
下面我们创建了一个Person对象,然后使用JsonConvert.SerializeObject将其序列化为JSON字符串。

using Newtonsoft.Json;
using System;namespace JsonSerializationExample
{class Program{static void Main(string[] args){// 创建一个C#对象Person person = new Person{Name = "John",Age = 30,City = "New York"};// 将对象序列化为JSON字符串string json = JsonConvert.SerializeObject(person);Console.WriteLine(json);}}public class Person{public string Name { get; set; }public int Age { get; set; }public string City { get; set; }}
}

反序列化

反序列化就是将JSON字符串转换为对象,使用JsonConvert.DeserializeObject方法将JSON字符串反序列化为C#对象;

using Newtonsoft.Json;
using System;namespace JsonDeserializationExample
{class Program{static void Main(string[] args){// JSON字符串示例string json = "{\"Name\":\"Alice\",\"Age\":25,\"City\":\"Los Angeles\"}";// 将JSON字符串反序列化为C#对象Person person = JsonConvert.DeserializeObject<Person>(json);// 访问反序列化后的对象属性Console.WriteLine($"Name: {person.Name}");Console.WriteLine($"Age: {person.Age}");Console.WriteLine($"City: {person.City}");}}public class Person{public string Name { get; set; }public int Age { get; set; }public string City { get; set; }}
}

总结

本文主要介绍了C#对JSON的简单操作,作者能力有限,文章中难免存在错误和纰漏,请指正,如果文章帮到了你,请帮忙点赞,三连支持。
👍👍👍
👍👍👍
👍👍👍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91058.shtml

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

相关文章

抖音短视频seo矩阵系统源代码开发系统架构及功能解析

短视频seo源码&#xff0c;短视频seo矩阵系统底层框架上支持了从ai视频混剪&#xff0c;视频批量原创产出&#xff0c;云存储批量视频制作&#xff0c;账号矩阵&#xff0c;视频一键分发&#xff0c;站内实现关键词、短视频批量搜索排名&#xff0c;数据统计分类多功能细节深度…

Package vips was not found in the pkg-config search path的解决方案

出现该问题是因为pkg-config未安装或未成功设置环境变量。 下文是centos下的操作。 前提 先安装C编译环境&#xff1a; yum -y install gcc-c 否则会报错configure: error: no acceptable C compiler found in $PATH 成功后gcc -v会显示版本信息。 下载&安装 pkg-config 传…

spark Structured报错解决

报错&#xff0c;不想看原因的直接去解决方案试试 Exception in thread "main" java.lang.IllegalArgumentException: Pathname /C:/Users/Administrator/AppData/Local/Temp/1/temporary-611514af-8dc5-4b20-9237-e5f2d21fdf88/metadata from hdfs://master:8020/C…

我的国庆回家之路

文章目录 回家的计划假期的礼物学习新技术与家人团聚遇到的趣事总结 &#x1f389;欢迎来到IT陈寒的博客空间~我的国庆回家之路 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;Java学习路线&#x1…

C++中将递增和递减运算符用于指针

C中将递增和递减运算符用于指针 指针包含内存地址。例如&#xff0c;程序中的 int 指针包含 0x002EFB34——int 在内存中的地址。 int 本身长 4 字节&#xff0c;因此占用 0x002EFB34&#xff5e;0x002EFB37 的内存。将递增运算符用于该指针后&#xff0c;它指向的并不是 0x00…

作用域 CSS 回来了

几年前&#xff0c;消失的作用域 CSS&#xff0c;如今它回来了&#xff0c;而且比以前的版本要好得多。 更好的是&#xff0c;W3C规范基本稳定&#xff0c;现在Chrome中已经有一个工作原型。我们只需要社区稍微关注一下&#xff0c;引诱其他浏览器构建它们的实现&#xff0c;并…

【教学类-35-03】学号+姓名+班级(小3班)学号字帖(A4竖版2份)

图片展示: 背景需求: 本周排到小3班&#xff0c;还没有来得及设计小班主题活动书的内容&#xff0c;于是就把小2班的学号字帖微调一下&#xff0c;做一份竖版2份的学号字帖。 让幼儿熟悉自己的学号&#xff0c;让我也熟悉幼儿的名字和学号 材料准备&#xff1a; 描字写&#…

基于微信小程序的二手闲置交易市场小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

【owt-server】fix : node-gyp configure 报错:Error: read ECONNRESET

npm已经设置了registry 还报错 npm config set registry http://registry.npmmirror.comnode-gyp configure 指令 node-gyp configure 报错 read ECONNRESET root@k8s-master-2K4G:~/p2p/zdsvr-20201229# ./scripts/build.js -t mcu --check /root/p2p/zdsvr-20201229/build/li…

【算法分析与设计】动态规划(下)

目录 一、最长公共子序列1.1 最长公共子序列的结构1.2 子问题的递归结构1.3 计算最优值1.4 举例说明1.5 算法的改进 二、最大子段和2.1 代码2.2 最大子段和问题的分治算法2.3 代码2.4 分治算法的时间复杂度2.5 最大子段和问题的动态规划算法 三、凸多边形最优三角剖分3.1 三角剖…

Spring cloud Sentinel介绍和安装

Sentinel介绍和安装 &#x1f308;初识Sentinel&#x1f308;安装Sentinel&#x1f320;docker 安装&#x1f320;下载sentinel镜像&#x1f320;启动sentinel镜像 &#x1f320;windows 安装&#x1f320;下载&#x1f320;运行 &#x1f320;sentinel访问 &#x1f308;微服务…

C++中的悬浮指针

C中的悬浮指针 悬浮指针&#xff08;也叫迷途或失控指针&#xff09; 是C程序内存管理方面一个很重要的问题。 使用 delete 释放后&#xff0c;任何有效指针都将无效。换言之&#xff0c;即便之前指针isSunny 是有效的&#xff0c;调用 delete 后&#xff0c;它也变成无效的了…

Neo4j-双向关系

概述 这是GraphAware中关于双向关系的解释。 网址链接Modelling Data in Neo4j: Bidirectional Relationships | GraphAware 定向关系 Neo4j中的关系必须有一个语义化的类型和方向。 没有方向关系是模棱两可的&#xff0c;上面A队打败B队&#xff0c;如果没有方向&#xff0c…

【数据结构】什么是数据结构?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f38f;数据结构的定义 &#x1f38f;结语 &#x1f38f;数据结构的定义 数据结构(Data Structure)是计算机存储,组织数据的方式,指相互之间存在一种或多种特定关…

【自监督Re-ID】ICCV_2023_Oral | ISR论文阅读

Codehttps://github.com/dcp15/ISR_%20ICCV2023_Oral 面向泛化行人再识别的身份导向自监督表征学习&#xff0c;清华大学 目录 导读 摘要 相关工作 DG ReID 用于ReID的合成数据 无监督表征学习 Identity-Seeking Representation Learning 结果 消融实验 导读 新角度…

Socket网络编程练习题五:客户端多用户上传文件(多线程版)并使用线程池管理线程

题目 想要服务器不停止&#xff0c;能接收很多客户上传的图片&#xff1f;我们知道是使用循环加多线程的方案来解决&#xff0c;但是如果频繁的创建和销毁线程&#xff0c;是非常浪费系统资源的&#xff0c;那应该怎么办呢&#xff1f; 解决方案 采用线程池&#xff0c;来管…

为什么 0.1+0.2 不等于 0.3

为什么 0.10.2 不等于 0.3 在 JavaScript 中&#xff0c;0.1 0.2 的结果不等于 0.3&#xff0c;这是因为在 JavaScript 中采用的是双精度浮点数格式&#xff08;64 位&#xff09;&#xff0c;而在这种格式下无法精确表示某些小数&#xff0c;因此在进行计算时会出现精度误差。…

Linux常见指令2

Linux常见指令[2] 一.Linux常见指令1.man补充知识:nano 2.cp3.mv4.cat补充知识:echo输出重定向追加重定向回到catcat其他用法 5.less和more补充内容回到less 6.head和tail补充知识:命令行管道 一.Linux常见指令 前言:为了方便我们在Linux中写指令 介绍一下: 1.clear指令: 清屏…

【小沐学C++】C++ 基于Premake构建工程项目(Windows)

文章目录 1、简介2、下载和安装2.1 下载2.3 快速入门 3、使用3.1 支持的工程文件Project Files3.2 构建设置Build Settings3.3 链接Linking3.4 配置Configurations3.5 平台Platforms3.6 过滤Filters3.7 预设值Tokens 4、测试4.1 测试1&#xff1a;入门例子4.2 测试2&#xff1a…

Spring修炼之路(1)基础入门

一、简介 1.1Spring概述 Spring框架是一个轻量级的Java开发框架&#xff0c;它提供了一系列底层容器和基础设施&#xff0c;并可以和大量常用的开源框架无缝集成&#xff0c;可以说是开发Java EE应用程序的必备。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器&…