C#——Json数据存储

本文使用的软件为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即可 ->勾选当前项目并安装

读取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文件,发现已经多了一个文件,里面的数据就是刚才写入的数据。如果写入的数据是之前读取数据的文件的话,就会把之前的数据给覆盖了。 

使用C# Newtonsoft Json通过json数据,解码json生成用于保存数据json类,通过json生成类代码,支持子类 自动 如 [{"itemsize":437,"pageId":1,"erpNickShopObj":null,"itemjbxx":[{"num":94628,"numIid":40239293981,"outerId":"异常1元连接","picUrl":"http://img04.taobaocdn.com/bao/uploaded/i4/TB1rdpFGXXXXXc5XFXXXXXXXXXX_!!1-item_pic.gif","price":"1.00","title":"[Enni.kr]<恩妮韩品>补邮费/订单异常关闭专拍连接","volume":0},{"num":65592,"numIid":36048181106,"outerId":"爱茉莉沐浴露套装200ml*3","picUrl":"http://img03.taobaocdn.com/bao/uploaded/i3/516137599/TB21kzXXVXXXXcUXXXXXXXXXXXX_!!516137599.jpg","price":"52.00","title":"韩国进口爱茉莉happybath 沐浴露 柠檬 玫瑰 薰衣草 200ml*3套装","volume":0},{"num":59765,"numIid":38272119734,"outerId":"7难题牙膏 绿款","picUrl":"http://img01.taobaocdn.com/bao/uploaded/i1/516137599/TB2xDbXXVXXXXbbXXXXXXXXXXXX_!!516137599.jpg","price":"9.90","title":"韩国进口LG贝瑞奥/倍瑞奥7难题解决牙膏7功能合一强健120G绿色","volume":0},{"num":59764,"numIid":38288409657,"outerId":"黄金皂2件套礼盒","picUrl":"http://img04.taobaocdn.com/bao/uploaded/i4/516137599/TB2XBbXXVXXXXbKXXXXXXXXXXXX_!!516137599.jpg","price":"90.00","title":"包邮 韩国纯金皂 24K金美容皂 天然特效美容黄金皂 2件套装 礼盒","volume":0},{"num":59763,"numIid":38272395230,"outerId":"7难题牙膏 蓝款","picUrl":"http://img02.taobaocdn.com/bao/uploaded/i2/516137599/TB204vXXVXXXXa5XpXXXXXXXXXX_!!516137599.jpg","price":"9.90","title":"韩国LG 贝瑞奥/倍瑞奥7难题解决牙膏 7功能合一 原味 120G 蓝色","volume":0},{"num":59758,"numIid":38278150798,"outerId":"9928牙膏绿色款","picUrl":"http://img03.taobaocdn.com/bao/uploaded/i3/516137599/TB2KDDXXVXXXXaEXXXXXXXXXXXX_!!516137599.jpg","price":"9.90","title":"韩国 LG贝瑞奥/倍瑞奥9928牙膏 强齿美白牙膏 120G 绿色","volume":0},{"num":59751,"numIid":38288605749,"outerId":"9928牙膏蓝色款","picUrl":"http://img04.taobaocdn.com/bao/uploaded/i4/516137599/TB2n9HXXVXXXXbxXXXXXXXXXXXX_!!516137599.jpg","price":"9.90","title":"韩国 LG 倍瑞奥 9928 牙膏 抗菌 牙龈护理 防蛀牙固定牙齿 120g","volume":0},{"num":59741,"numIid":38301128090,"outerId":"9928牙膏红色款","picUrl":"http://img01.taobaocdn.com/bao/uploaded/i1/516137599/TB2PATXXVXXXXcHXXXXXXXXXXXX_!!516137599.jpg","price":"9.90","title":"韩国 LG贝瑞奥/倍瑞奥9928牙膏 消炎
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值