C#解析JSON详解

news2024/12/23 0:38:02

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.coloradmin.cn/o/1043821.html

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

相关文章

作为一名独立开发者,如何获取客户?

很多程序员想成为一名独立开发者&#xff0c;从事自由职业&#xff0c;最大的困难在于如何赚钱&#xff0c;进一步来说&#xff0c;就是如何找到自己的客户&#xff0c;有很多开发者拥有丰富的经验&#xff0c;优秀的能力&#xff0c;但无法吸引客户。这篇文章的灵感正是为此而…

Qt扩展-QCustomPlot 简介及配置

QCustomPlot 简介及配置 一、概述二、安装教程三、帮助文档的集成 一、概述 QCustomPlot是一个用于绘图和数据可视化的Qt 控件。它没有进一步的依赖关系&#xff0c;并且有良好的文档记录。这个绘图库专注于制作好看的、发布质量的2D绘图、图形和图表&#xff0c;以及为实时可…

【面试题】Promise只会概念远远不够,还需这17道题目巩固!

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 在学习Promise相关题目之前&#xff0c;我们先做一些知识的回顾&#xff1a;JavaScript 是一门单…

自动化测试面试经历

一家做户外的外企 面试问题 1、自我介绍&#xff1a;大概介绍了自己的工作经历 2、数据库问题&#xff1a;学生表中包含id、姓名、成绩、班级&#xff0c;求平均成绩 回答&#xff1a;group by 班级&#xff0c;求平均&#xff08;不够完美&#xff09; 3、java的访问修饰符…

MQ - 32 基础功能:消息查询的设计

文章目录 导图概述什么时候会用到消息查询消息队列支持查询的理论基础消息数据存储结构关于索引的一些知识点内核支持简单查询根据 Offset 查询数据根据时间戳查询数据根据消息 ID 查询数据借助第三方工具实现复杂查询第三方引擎支持查询工具化简单查询总结导图 概述 从功能上…

Error:java: 错误: 不支持发行版本 5

当创建maven项目之后&#xff0c;编译一个简单的helloworld,发生以下报错 : Error:java: 错误: 不支持发行版本 5 解决方案 : File -> Settings -> BUIld,Execution,Deployment -> Compiler -> Java Compiler 将Module表格中的Target bytecode version的1.5换…

【优测云服务平台】打造承载百倍级增长后台背后的力量-性能优化

项目介绍&#xff1a; 腾讯课堂是腾讯推出的专业在线教育平台&#xff0c;凭借技术优势&#xff0c;实现在线即时互动教学&#xff0c;打破地域的限制&#xff0c;让每个人都能接受优秀老师的指导和教学。 一、背景 2020年初&#xff0c;新冠病毒肆虐&#xff0c;疫情大面积爆…

基于SSM的办公用品管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

cocoscreator3.X 强更 游戏内下载APK和安装APK

本文环境3.6.0&#xff0c;目测3.7, 3.8都可以用 强制更新是强制用户下载整包并覆盖安装&#xff0c;因为android部分代码不方便热更&#xff0c;所以游戏内采用服务器推送下载通知&#xff0c;游戏执行下载后再安装的形式. 下载完全可在ts层完成&#xff0c;可采用cocoscrea…

继苹果、联发科后,传高通下一代5G芯片将由台积电以3纳米代工

台积电3纳米又有重量级客户加入。市场传出&#xff0c;继苹果、联发科之后&#xff0c;手机芯片大厂高通下一代5G旗舰芯片也将交由台积电以3纳米生产&#xff0c;最快将于10月下旬发表&#xff0c;成为台积电3纳米第三家客户。 针对相关传闻&#xff0c;至昨日&#xff08;25日…

基于SpringBoot的药房管理系统

基于SpringBootVue的药房管理系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;管理员、用户 管理员&am…

共享门店模式:一种新兴的商业模式

共享门店模式是一种利用实体店铺的空间和资源&#xff0c;让多个品牌或商家在同一地点共同运营的商业模式。这种模式可以提高店铺的利用率&#xff0c;降低经营成本&#xff0c;增加客流量&#xff0c;实现资源的最大化利用。如果你是一个有创业想法的企业家&#xff0c;或者你…

Webshell 流量特征分析 (2)

前言&#xff1a;webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、权限管理等操作。使用方法简单&#xff0c;只需上传一个代码文件&#xff0c;通过网址访问&#xff0c;便可进行很多日常操作&#xff0c;极…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

【ComfyUI】Pytorch预训练模型(torch.hub)缓存地址修改

序言 最近玩ComfyUI时&#xff0c;每次生成图片&#xff0c;总是会下载一些东西&#xff0c;时间长了&#xff0c;C盘就不够用了&#xff0c;今天清理C盘发现&#xff0c;总是会在C:\Users\yutao\.cache\torch\hub\checkpoints这个路径下&#xff0c;下载大模型文件&#xff0…

初级软件测试入门教程

一、软件测试的基本概念 1、软件测试的定义 就是以发现错误为目的而运行程序的过程。 软件测试员的目标是找到软件缺陷&#xff0c;尽可能早一些&#xff0c;并确保其得以修复。 2、软件测试方法总体分类 试图验证软件是“工作的”&#xff08;所谓“工作的”就是指软件的…

linux应用层静态链接和动态链接(.a .so)

1、介绍 即使一个非常简单的程序&#xff0c;也需要依赖C标准库和系统库&#xff0c;链接其实就是把其他第三方库和自己源代码生成的二进制目标文件融合在一起的过程。经过链接之后&#xff0c;那些第三方库中定义的函数就能被调用执行了。早期的一些操作系统一般使用静态链接…

代码随想录算法训练营第23期day7| 454.四数相加II 、383. 赎金信 、15. 三数之和、18. 四数之和

目录 一、&#xff08;leetode 454&#xff09;四数相加II 二、&#xff08;leetcode 383&#xff09;赎金信 暴力解法 哈希法 三、&#xff08;leetcode 15&#xff09;三数之和 四、&#xff08;leetcode 18&#xff09;四数之和 一、&#xff08;leetode 454&#xf…

git 分支管理进阶

1. merge 命令&#xff1a;git merge A 作用&#xff1a;把 A 分支 合并到当前分支 &#xff08;此时当前分支新增了一次提交&#xff0c;指着指向该提交&#xff09; 初始状态&#xff1a; git merge bugFix 后&#xff1a; 此外&#xff0c;如果再把 main 分支合并到 bug…

Unigram,Bigram,N-gram介绍

Unigram,Bigram&#xff0c;N-gram介绍 Unigram,Bigram&#xff0c;N-gram这三个概念&#xff0c;在学习自然语言的过程中大家可能会遇到。 Unigram,Bigram&#xff0c;N-gram在自然语言内容中的语言模型部分中大家可能会碰到。语言模型有很多种&#xff0c;在上一篇介绍一个…