Json数据概念及C# 环境下的序列化、反序列化操作

news2025/1/13 7:40:35

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

与xml相比,更快,更小,更容易解析/.

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

由键值对组成,每个键(属性名)都是一个字符串,后面跟着一个值。
值可以是字符串、数字、布尔值、对象、数组、null等。
JSON对象是由一对大括号{}包围的键值对集合,键和值之间用冒号 : 分隔。
JSON数组是由一对方括号 [] 包围的值的有序列表,值之间用逗号 , 分隔。
{
    "name": "xiaomi Su7",
    "SN": 123456,
    "isCar: true,
    "Journey": "1000km"
}
注意:在上面的示例中,name就是一个属性或者是键,后面跟一个:号,xiaomi Su7 则是值,键值对必须成对出现,键值对之间需要用,隔开.

Json值主要有以下类型:
字符串:
JSON字符串必须用双引号 " 包围,而不是单引号 ',或者没有任何引号围起来.

数字:
JSON支持整数和浮点数。

布尔值:
JSON使用true和false表示布尔值。

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

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

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

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


{
   "Students":[
       {"FirstName":"Jim","LastName":"Green","IsHigh":true},
       {"FirstName":"Li","LastName":"Wang","IsHigh":false},
       {"FirstName":"Li123","LastName":"Wang123","IsHigh":false}
   ]
}

{"FirstName":"Jim","LastName":"Green","IsHigh":true},表示一个对象
[]内表示一个数组,数组名称是“Students”.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace _68.myJSON
{
    class Program
    {
        static void Main(string[] args)
        {
            //Reference .Net JSON
            //using Newtonsoft.Json;
            //序列化数据,生成JSON文件
            var o1 = new Person { Name = "David", Age = 29, ID = 001 };
            var o2 = new Person { Name = "lily", Age = 25, ID = 002 };
            var o3 = new Person { Name = "Lucy", Age = 28, ID = 003 };
            var o4 = new Person { Name = "Jim", Age = 30, ID = 004 };
            var o5 = new Person { Name = "Steve", Age = 27, ID = 005 };
            Object[] objects = { o1, o2, o3, o4, o5 };
            string str_JSON = JsonConvert.SerializeObject(objects,Formatting.Indented);
            File.WriteAllText(@"D:\MyDatas.json", str_JSON);

            //解析JSON文件,反序列化操作,JSON数据是数组,元素是Person,所以反序列化操作的泛型类型参数是List<Person>,返回List<Person>
            List<Person> people = JsonConvert.DeserializeObject<List<Person>>(File.ReadAllText("D:\\MyDatas.json"));
            foreach (var item in people)
            {
                Console.WriteLine($"{item.Name},{item.Age},{item.ID}");
            }
            Console.ReadKey();
        }
    }
    public class Person
    {
        public string Name { get; set; }
        public int ID { get; set; }
        public int Age { get; set; }
    }
}

如上例,将5个Person对象组成的数组作为数据序列化成一个Json格式的文本文件,如下:

[
  {
    "Name": "David",
    "ID": 1,
    "Age": 29
  },
  {
    "Name": "lily",
    "ID": 2,
    "Age": 25
  },
  {
    "Name": "Lucy",
    "ID": 3,
    "Age": 28
  },
  {
    "Name": "Jim",
    "ID": 4,
    "Age": 30
  },
  {
    "Name": "Steve",
    "ID": 5,
    "Age": 27
  }
]

然后我们呢通过泛型反序列化函数DeserializeObject<List<Person> >,将Json格式的文本文件转换成List<Person> 对象,循环得到的集合数据如下:

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

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

相关文章

银河麒麟桌面版开机后网络无法自动链接 麒麟系统开机没有连接ens33

1.每次虚拟机开机启动麒麟操作系统&#xff0c;都要输入账号&#xff0c;密码。 进入点击这个ens33 内网才连接 2. 如何开机就脸上呢&#xff1f; 2.1. 进入 cd /etc/sysconfig/network-scripts 2.2 修改参数 onbootyes 改为yes 2.3 重启即可 a. 直接重启机器查看是否正常&…

搜好货API接口:快速获取商品列表的利器

搜好货商品列表API接口允许开发者根据关键字搜索并获取相关的商品列表数据。接口支持多种参数配置&#xff0c;可以根据需求灵活调整搜索条件和结果返回格式。 点击获取key和secret API接口请求说明 请求地址&#xff1a;https://api.souhaohuo.com/goods/search请求方法&…

第四篇:记忆的迷宫:探索计算机存储结构的奥秘与创新

记忆的迷宫&#xff1a;探索计算机存储结构的奥秘与创新 1 引言 1.1 计算机存储系统的发展与重要性 在现代计算技术中&#xff0c;存储系统承担着非常关键的角色&#xff0c;它不仅负责信息的持久保存&#xff0c;同时确保高效的数据访问速度&#xff0c;影响着整体系统性能的…

C++奇迹之旅:C++初阶模版

文章目录 &#x1f4dd;泛型编程&#x1f320; 函数模板&#x1f309;函数模板概念&#x1f309;函数模板格式&#x1f309;函数模板的原理 &#x1f320;函数模板的实例化&#x1f309;模板参数的匹配原则 &#x1f320;类模板&#x1f309; 类模板的定义格式&#x1f309;类模…

用vim或gvim编辑程序

vim其实不难使用&#xff0c;学习一下就好了。简单功能很快学会。它有三种模式&#xff1a;命令模式&#xff0c;编辑模式&#xff0c;视模式。打开时在命令模式。在命令模式下按 i 进入编辑模式&#xff0c;在编辑模式下按<Esc>键退出编辑模式。在命令模式按 :wq 保存文…

STM32入门学习之DMA

1.直接存储访问DMA(Direct Memory Access)&#xff1a;DMA传输不需要CPU的参与&#xff0c;直接在内存和I/O设备间开辟了一条新的数据传输通道&#xff0c;不仅提高数据传输的速率&#xff0c;还因为不需要CPU的干预&#xff0c;从而提高了CPU的利用率。(注&#xff1a;文中的资…

从永远到永远-和弦-挂留和弦

挂留和弦 1.概念2.指型1.Xsus2和弦2.Xsus4和弦 3.应用 1.概念 该篇说下和弦中的“渣男”、“绿茶”&#xff0c;挂留和弦。 挂留&#xff08;suspended&#xff09;和弦是将三和弦的三音替换成大二度或纯四度音形成的&#xff0c;包括挂留二和弦、挂留四和弦两种。 三音是一个…

【Android学习】简易计算器的实现

1.项目基础目录 新增dimens.xml 用于控制全部按钮的尺寸。图片资源放在drawable中。 另外 themes.xml中原来的 <style name"Theme.Learn" parent"Theme.MaterialComponents.DayNight.DarkActionBar">变为了&#xff0c;加上后可针对button中增加图片…

【nature review】用于非易失性射频开关技术的新兴存储电子器件

这篇文章是一篇关于非挥发性射频&#xff08;RF&#xff09;开关技术的综述文章&#xff0c;发表在《Nature Reviews Electrical Engineering》2024年1月的期刊上。文章详细介绍了新兴的基于记忆电子技术的RF开关技术&#xff0c;特别是在二维&#xff08;2D&#xff09;材料方…

Oracle23ai来了,23爱,全能、超级巨兽...

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

一毛钱不到的FH8208C单节锂离子和锂聚合物电池一体保护芯片

前言 目前市场上电池保护板&#xff0c;多为分体方案&#xff0c;多数场合使用没有问题&#xff0c;部分场合对空间有进一步要求&#xff0c;或者你不想用那么多器件&#xff0c;想精简一些&#xff0c;那么这个芯片就很合适&#xff0c;对于充电电池来说&#xff0c;应在使用…

gige工业相机突破(一)

gige相机能不能绕开相机生产商提供的sdk&#xff0c;而直接取到像&#xff1f; 两种办法&#xff0c;第一&#xff0c;gige vision2.0说明书&#xff0c;第二&#xff0c;genicam 首先你会去干什么事&#xff1f; 好几年&#xff0c;我都没有突破&#xff0c;老虎吃天&#x…

Jenkins流水线部署springboot项目

文章目录 Jenkins流水线任务介绍Jenkins流水线任务构建Jenkins流水线任务Groovy脚本Jenkinsfile实现 Jenkins流水线任务实现参数化构建拉取Git代码构建代码制作自定义镜像并发布 Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目&#xff0c;每个步骤流程都要通过不…

InfiniFlow 創始人兼CEO張穎峰確認出席“邊緣智能2024 - AI開發者峰會”

隨著AI技術的迅猛發展&#xff0c;全球正逐步進入邊緣計算智能化與分布式AI深度融合的新時代&#xff0c;共同書寫著分布式智能創新應用的壯麗篇章。邊緣智能&#xff0c;作為融合邊緣計算和智能技術的新興領域&#xff0c;正逐漸成為推動AI發展的關鍵力量。借助分布式和去中心…

JavaScript 如何理解柯里化函数结构及调用

文章目录 柯里化函数是什么逐步理解柯里化函数 柯里化函数是什么 柯里化&#xff08;Currying&#xff09;函数&#xff0c;又称部分求值&#xff0c;是一种函数转换技术。这种技术将一个接受多个参数的函数转换为一系列接受单一参数的函数。具体来说&#xff0c;一个柯里化的…

AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

C语言 | Leetcode C语言题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; void reserve(char* s) {int len strlen(s);for (int i 0; i < len / 2; i) {char t s[i];s[i] s[len - i - 1], s[len - i - 1] t;} }char* addBinary(char* a, char* b) {reserve(a);reserve(b);int len_a strlen(a), len_b st…

LeetCode 面试经典150题 28.找出字符串中第一个匹配项的下标

题目&#xff1a;给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 思路&#xff1a;暴力&#xff08;…

一个肉夹馍思考的零耦合设计

刷抖音听说知识付费是普通人的一个收入增长点&#xff0c;写了三十几篇文章一毛钱没赚&#xff0c;感觉有点沮丧。天上下着小雨雨&#xff0c;稀稀嗦嗦的&#xff0c;由于了很久还是买了一个&#x1f928;。 忽然觉得生活有点悲催&#xff0c;现在已经变得斤斤计较&#xff0c;…

「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解

CycloneDX是软件供应链的现代标准。CycloneDX物料清单&#xff08;BOM&#xff09;可以表示软件、硬件、服务和其他类型资产的全栈库存。该规范由OWASP基金会发起并领导&#xff0c;由Ecma International标准化&#xff0c;并得到全球信息安全界的支持&#xff0c;如今CycloneD…