C#——Json数据存储

news2025/1/13 6:18:12

本文使用的软件为VS2022,不同的软件使用上有些许差异。

C#数据存储

关于数据存储,一般在退出控制台之后,暂存的数据都会释放掉,有没有什么方法能够在下一次进入的时候还能加载上一次的数据呢?答案是有的,关于数据的存储有三种存储格式。第一种是直接存储为txt文本,第二种是存储为Json文件,第三种是存储为xml格式。三种方式各有各的有缺点,本文将介绍存储为Json格式文件。

Json基本格式

  1. 基本类型:数值类型,字符串类型,布尔类型
  2. 键值对:JSON数据由键值对组成,键和值之间用冒号(:)分隔。值可以是任意类型,键是字符串,必须用双引号("")括起来。
  3. 对象:一个JSON对象由多个键值对组成,这些键值对用逗号(,)分隔,并且整个对象用花括号({})包围
  4. 数组:JSON数组由一系列值组成,这些值可以是任何类型,包括其他对象或数组。数组中的值用逗号(,)分隔,并且整个数组用方括号([])包围。
  5. 嵌套:JSON对象可以包含数组,数组可以包含对象或其他数组,形成嵌套结构。
  6. 特殊字符:字符串中的某些特殊字符需要使用转义字符。
  7. 大小写敏感:JSON的键名是大小写敏感的,这意味着 Name 和 name 被视为两个不同的键。
  8. 注释:JSON标准本身不支持注释,但是某些解析器可能允许使用注释。

如下简单Json文件所示,一个数组里面包含了三个对象,对象都具有 Id 和 name 属性。

[
  {
    "id": 1001,
    "name": "张三"
  },
  {
    "id": 1002,
    "name": "李四"
  },
  {
    "id": 1003,
    "name": "王五"
  }
]

准备 Newtonsoft.Json 工具

创建Json文件

首先,打开项目所在文件位置创建一个文件夹用来存储和管理 Json 文件。

打开文件夹右键新建一个文本文件。

重命名并且更改文件后缀名。

(win11显示文件后缀名) 

安装 Newtonsoft.Json 工具

Json文件是通过序列化来存储数据的,也就是说,数据要存入Json之前要先进行序列化,要从Json读取数据时要反序列化,才能正确的读取和存入数据。

按照顺序点击,工具->NuGet包管理器->管理解决方案的NetGet程序包->浏览->搜索newtonjson->下载newtonsoft.Json 和 newtonsoft.Json.Bson->勾选当前项目并安装

读取Json文件数据

先定义一个路径的变量

绝对路径获取:可以用 @" 文件路径 " 来获取,也可以插入转义字符来获取路径。如下代码演示。

File.ReadAllText :文件流操作下的方法,打开一个文本文件,读取文件所有行,然后关闭文件。

JsonConvert :newtonsoft.Json下的类

DeserializeObject():反向序列化的方法

            string content = File.ReadAllText(@"C:\此处省略文件路径,请添加已创建的json文件路径\JSONRead\JSONRead\Configs\Level.json");
            //string content2 = File.ReadAllText("C:\\此处省略文件路径,请添加已创建的json文件路径\\JSONRead\\JSONRead\\Configs\\Level.json");

            List<Level> listData = JsonConvert.DeserializeObject<List<Level>>(content);
            foreach (var level in listData)
            {
                Console.WriteLine($"ID: {level.id}, Name: {level.name}");
            }

写入Json文件数据

创建写入Json文件数据的类

  类中的成员要与Json文件中的键值对类型保持一致。

        class Level
        {
            public Level(int inId, string inName)
            {
                id = inId;
                name = inName;
            }
            public int id;
            public string name;
        }

创建List列表和传入该类的对象

通过List列表的Add()方法可以将数据添加到列表中,也可以传入Level类的对象。

给Level创造一个构造函数,可以在创建对象的时候完成赋值。

            List<Level> listData = new List<Level>();
            listData.Add(new Level(2001, "easy"));
            listData.Add(new Level(2002, "normal"));
            listData.Add(new Level(2003, "hard"));

 查看List列表的数据

可以先查看一下List列表是否传入了Level的对象

            foreach (var level in listData)
            {
                Console.WriteLine($"ID: {level.id}, Name: {level.name}");
            }

序列化数据,并写入文件

string jsonStr = JsonConvert.SerializeObject(listData);
File.WriteAllText(@"C:\此处省略文件路径,请添加已创建的json文件路径\JSONRead\JSONRead\Configs\Level01.json", jsonStr);

 打开刚才管理Json文件,发现已经多了一个文件,里面的数据就是刚才写入的数据。如果写入的数据是之前读取数据的文件的话,就会把之前的数据给覆盖了。 

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

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

相关文章

利用Arcgis设置分式标注(分子分母标注)

因工作需要&#xff0c;需要设置分式标注&#xff0c;下面详细介绍下如何利用arcgis 设置分式标注&#xff0c;以下操作以供参考&#xff0c;如有疑义可提出。 一、准备工作 软件&#xff1a;arcmap 示例数据&#xff1a;行政区shp矢量图 二、操作步骤 1.添加数据 将行政区sh…

Golang | Leetcode Golang题解之第307题区域和检索-数组可修改

题目&#xff1a; 题解&#xff1a; type NumArray struct {nums, tree []int }func Constructor(nums []int) NumArray {tree : make([]int, len(nums)1)na : NumArray{nums, tree}for i, num : range nums {na.add(i1, num)}return na }func (na *NumArray) add(index, val …

MinIO安装(思路、方法、步骤(以centos8安装为例))

MinIO安装&#xff08;思路、方法、步骤&#xff08;以centos8安装为例&#xff09;&#xff09; 简介 MinIO 是一个高性能、开源的对象存储系统&#xff0c;旨在提供简单、可扩展的存储解决方案&#xff0c;特别适用于大数据、AI 和 ML 应用。 步骤记录 首先我们进入官网看…

前端使用 Konva 实现可视化设计器(19)- 连接线 - 直线、折线

本章响应小伙伴的反馈&#xff0c;除了算法自动画连接线&#xff08;仍需优化完善&#xff09;&#xff0c;实现了可以手动绘制直线、折线连接线功能。 请大家动动小手&#xff0c;给我一个免费的 Star 吧~ 大家如果发现了 Bug&#xff0c;欢迎来提 Issue 哟~ github源码 gitee…

最全个人笔记【Makefile】

1. 基本概念 1.1 make是什么 当一个项目中要编译的文件很多时&#xff0c;手工使用编译器一个个进行编译&#xff0c;很明显不具有可操作性&#xff0c;此时必须借助某些软件&#xff0c;协助我们有序地、正确地自动编译整个工程的所有该编译的文件。这样的软件被称为 工程管…

Simulink|基于粒子群算法的永磁同步电机多参数辨识

目录 主要内容 模型研究 结果一览 下载链接 主要内容 仿真程序参考文献《改进粒子群算法的永磁同步电机多参数辨识》&#xff0c;采用粒子群算法与simulink模型结合的方式&#xff0c;对永磁同步电机进行多参数辨识。程序以定子绕组电阻、d轴电感、q轴电感和永磁…

ai写作免费版工具上哪找?一文详解5大ai写作神器

面对写作难题&#xff0c;你是否曾感到力不从心&#xff1f;从创意枯竭到语法错误&#xff0c;每个写作环节都可能成为挑战。但如今&#xff0c;有了ai写作工具的帮助&#xff0c;这些难题都能迎刃而解。今天&#xff0c;就让我们一起来看看ai写作免费网页版应该怎么选吧&#…

Win11系统文件资源管理器鼠标右键卡顿解决方法

引用链接&#xff1a; Windows 11文件资源管理器崩溃怎么解决&#xff1f;看看这7个解决办法&#xff01;

订单搜索分页查询业务

文章目录 概要整体架构流程技术细节小结 概要 订单搜索分页查询是电商、物流、零售等众多行业中的常见需求&#xff0c;主要用于管理和分析大量订单数据. 需求分析以及接口设计 技术细节 1.Controller层: 根据接口设计来写 ApiOperation("订单搜索")GetMapping(…

使用plink和git进行数据处理

首先使用git进行plink环境配置&#xff0c;显示环境安装成功&#xff0c;在此环境下可以使用plink 在基因型数据处理过程中&#xff0c;看到vcf文件后首要做的就是将vcf文件转成二进制文件&#xff0c;输入命令 plink --vcf genotype.vcf --allow-extra-chr --recode --out tes…

滑动窗口代码实现

public int minSubArrayLen(int target, int[] nums) {int len nums.length;int res len 1;//最大是len&#xff0c;如果最后res结果还是n1说明没有答案返回0int sum0;int left0;for(int right0; right<len; right){sumnums[right];while(sum>target){//不需要判断rig…

算法 —— 递推

目录 递推 数楼梯 斐波那契数列 一维数组递推 P1002 过河卒 二维数组递推 P1044 栈 卡特兰数 递推 将一个很大的任务分解成规模小一些的子任务&#xff0c;子任务分成更小的子任务&#xff0c;直到遇到初始条件&#xff0c;最后整理归纳解决大任务的思想就是递推与递…

Kafka基本概念,工作流程介绍

1、消息队列与Kafka 1.1、Kafka简介 Kafka使用scala开发&#xff0c;支持多语言客户端&#xff08;c、java、python、go等&#xff09; Kafka最先由LinkedIn公司开发&#xff0c;之后成为Apache的顶级项目。 Kafka是一个分布式的、分区化、可复制提交的日志服务 LinkedIn使…

麒麟系统查看和修改ip

查看ip ifconfig ifconfig enp0s3 192.168.1.110

ROS中自定义头文件和源文件

今天分享一下如何在ROS中进行头文件和源文件的调用。案例是实现输出"Hello World" 本文的头文件(即.h文件)放在include/${project_name}路径下, 源文件和可执行文件则在src文件夹下 第一步&#xff1a;创建工作空间&#xff0c;创建包&#xff0c;使用vscode打开工作…

mysql高级语句的查询语句

一、排序语法&#xff0c;关键字排序 升序和降序 默认的排序方式就是升序 升序&#xff1a;ASC 降序&#xff1a;DESC 配合语法&#xff1a;order by 语法 1、升序 select * from info order by name; 根据名字升序排序&#xff0c;不需要加ASC select * from info order…

kubernetes prometheus 系列| helm 部署prometheus+grafana

一、环境准备 部署k8s集群 k8sv1.26直通车搭建 安装存储类 nfs动态供给直通车 安装helm工具 https://github.com/helm/helm/releases tar -zxvf helm-v3.5.4-linux-amd64.tar.gz sudo mv linux-amd64/helm /usr/local/bin/helm chmod ox /usr/local/bin/helm helm version二、…

day05 1.多线程基本概念 2.线程支持函数(多线程编程)

1、使用两个线程完成两个文件的拷贝&#xff0c;分支线程1拷贝前一半&#xff0c;分支线程2拷贝后一半&#xff0c;主线程回收两个分支线程的资源 #include <myhead.h>int copy_file(const char *srcfile,const char *destfile,int start,int len);struct Buff {const c…

TMGM官网中国大陆地区客户

仅限TMGM官网中国大陆地区客户且每位客户每月仅限参与一次 申请限制&#xff1a;客户完成某一档位并点击兑换礼物后&#xff0c;该活动结束。若客户继续入金达到下一个档位&#xff0c;可以获得多份该档位礼物&#xff0c;此时无法通过活动板块继续申请&#xff0c;需要联系客…

案例 —— 怪物出水

一&#xff0c;Ocean Setup 设置海洋Surface Grid&#xff08;使用Large Ocean工具架&#xff09; 调节默认Grid的大小尺寸及细分&#xff08;使用非常小尺寸来测试&#xff09;&#xff1b;调整频谱输入点的多少&#xff0c;频谱Grid Size&#xff0c;波浪方向&#xff0c;速度…