.json文件的C#解析,基于Newtonsoft.Json插件

目录

1. 前言

2. 正文

2.1 问题

2.2 解决办法

2.2.1 思路

2.2.2 代码实现

2.2.3 测试结果

3. 备注


1. 前言

天气晚来秋,这几天天气变凉了,各位同学注意好多穿衣服。回归正题

由于需要,需要将json的配置里面的调理解析出来,做成接口,以便于开发。

2. 正文

2.1 问题

会给到目录里面一个json的文件,然后固定格式,你只要将读取到的内容写成接口。

2.2 解决办法

2.2.1 思路

刚开始准备用读取文件的方式,一个一个判断来着,结果,在网上搜索,发现了基于json文件处理的库,这下美滋滋了,而且极其方便。实现是要还是先读文件,然后将文件放在一个缓冲区中,最后导入到JsonConvert.DeserializeObject()这个函数中,在传递到这个函数之前,要保证你成功打开了文件,并且缓冲区是有的,最主要的是要保证你的json文件格式是是正确的。要是不知道json文件格式的可以另行搜索,我没常见的json文件就是在vscode环境配置的时候,里面大多是基于.json去配置的。

我给大家准备了一个json的文件,示例如下

{
    "Json文件配置参数": {
        "文件设置": {
            "colour": "white",
            "Font": "UTF_8",
            "count": "50"
        }
    }
}

对了,值得注意的是,.json是支持中文查找的,但是为了,代码一致性和规范性,还是建议使用中文,这里作为演示,不再赘述。

思路,就是将json文件里的对象转换成结构体,然后外部可以访问这个结构体 ,达到数据接口的目的。代码里的注释也是非常清楚,值得注意的是,config["匹配项"]返回值是string类型。

另外过程中一些常见的问题如下

库的安装

点击项目

 点击管理NuGet程序包

 下载这个库,就饿可以正常使用了。 

报错问题

Error parsing JSON: The input string '' was not in a correct format.

这个错误提示表明在解析JSON字符串时出现了问题,原因是输入的字符串为空或者格式不正确。请检查输入的JSON字符串是否正确。

S0120:对急引用对于非静态的字段、方法或属性"JsonParser,sendcalibrationdata"是必需的

因为 f02() 是非静态函数;而主函数 Main 前有关键字 static ,其为静态函数。所以当静态函数调用非静态函数时,会出现如上所示的错误。

至于如果大家在开发过程中遇到其他的问题,要冷静分析,查阅资料。

2.2.2 代码实现

// See https://aka.ms/new-console-template for more information
using System;
using System.IO.Ports;

using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Collections;
using System.Diagnostics;
using static System.Runtime.InteropServices.JavaScript.JSType;
using System.Reflection;
using System.Threading.Channels;


using System.Collections.Concurrent;
using System.Text.RegularExpressions;
using Microsoft.VisualBasic.FileIO;
using Microsoft.Win32;
using System.Numerics;
using static System.Net.Mime.MediaTypeNames;
using System.Collections.Generic;
using Newtonsoft.Json;
using static Example.JsonParser;

namespace Example
{
    class JsonParser
    {
        //定义结构体
        public struct FileSet
        {
            public string colour;
            public string Font;
            public Int16 count;

        };
        //创建对象
        public FileSet fileset = new();
        //构造函数
        public JsonParser()
        {
            string filePath = @"..\..\..\config.json"; // 请替换为实际的文件路径
            if (File.Exists(filePath))
            {
                string jsonContent = File.ReadAllText(filePath);
                dynamic data = JsonConvert.DeserializeObject(jsonContent);
                ParserData(data);

            }
            else
            {
                Console.WriteLine("文件不存在,请检查文件路径。");
            }
        }
        //带参构造函数
        public JsonParser(string temp)
        {
            string filePath = temp; // 请替换为实际的文件路径
            if (File.Exists(filePath))
            {
                string jsonContent = File.ReadAllText(filePath);
                dynamic data = JsonConvert.DeserializeObject(jsonContent);
                ParserData(data);
            }
            else
            {
                Console.WriteLine("文件不存在,请检查文件路径。");
            }
        }
        //解析函数
        private void ParserData(dynamic data)
        {
            var config = data["Json文件配置参数"];
            FileSetData(config["文件设置"]);
        }
        //具体的结构体解析函数
        private void FileSetData(dynamic setfile)
        {
            //"文件设置"
            string[] temp = new string[3];
            if (null == setfile)
                Console.WriteLine("weidudao");
            temp[0] = setfile["colour"];
            temp[1] = setfile["Font"];
            temp[2] = setfile["count"];
            fileset.colour = temp[0];
            fileset.Font = temp[1];
            fileset.count = Int16.Parse(temp[2]);
        }
    }
    class Program
    {
        static void Main()
        {
            JsonParser aaa = new JsonParser();
            Console.WriteLine("文件设置");
            Console.WriteLine("  colour:" + aaa.fileset.colour);
            Console.WriteLine("  Font:" + aaa.fileset.Font);
            Console.WriteLine("  count:" + aaa.fileset.count);
        }
    }
}

2.2.3 测试结果

测试结果,也是直接读取到了我们想要的内容。

3. 备注

>>>>>>

一段路,一段成长,一次经历,一次改变,成功或许很遥远,但是我们都是追梦人。

>>>>>>

我的努力求学没有得到别的好处,只不过是愈来愈发觉自己的无知。——笛卡儿

 >>>>>>

制作不易,且行且珍惜,点个关注支持下吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RV1126采集VI视频数据流

本章节内容 这个章节主要是讲解如何通过RKMEDIA的API获取RV1126的VI视频流,虽然这部分在之前的课程里面讲解了很多次,但还是要带着大家回顾一下这部分代码。 采集VI数据的代码实现 2.1. VI模块的初始化并使能 上图是VI模块的初始化,这部分的…

STM32+ESP8266 WiFi连接机智云平台APP远程控制教程

本文档将介绍如何用STM32ESP8266 WiFi模块从零开始连接上机智云,并通过APP进行远程控制。 机智云官网:机智云|智能物联网操作系统 (gizwits.com) 准备:STM32、ESP8266、手机、可上网的WiFi。 1.创建设备 1.1 注册登陆 请自行注册账号并登陆…

ASUS华硕ROG幻16 Air 2024款锐龙AI版GA605WI,GA605WV工厂模式原厂Win11系统,含MyASUS WinRE恢复重置还原功能

适用型号:【GA605WI、GA605WV】,原装出厂Windows11系统工厂包下载 链接:https://pan.baidu.com/s/1IVolLwB7fddGKZY0IxOqaA?pwd62e2 提取码:62e2 华硕原装系统工厂安装包,带有MyASUS WinRE RECOVERY恢复功能、自带…

健身房|基于springboot的健身房管理系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 随着信息技术在管理上越来越深入而广泛的应用,管理…

基于node.js koa2模拟快递柜存储取出快递微信小程序

本文介绍了一个基于Node.js Koa2框架的快递柜存储和取出快递的微信小程序。首先,我们使用Koa2框架搭建了一个简单的后端服务器,用于处理微信小程序发送的请求。然后,我们实现了快递柜的存储和取出功能,用户可以通过微信小程序扫描…

分布式通信:多计算平台的任务分配

目录 1. 分布式通信 1.1 树莓派配置流程​编辑 1.2 树莓派和laptop处于同一网络​编辑 1.3 laptop配置 1.4 通信测试 1.5 分组通信 ​编辑 1.6 分布式通信测试 ​编辑参考资料 1. 分布式通信 机器人体积较小,采用树莓派作为控制器,实现传感器处…

音视频入门基础:AAC专题(1)——AAC官方文档下载

一、AAC简介 高级音频编码(英语:Advanced Audio Coding,AAC)是有损音频压缩的专利数字音频编码标准,由Fraunhofer IIS、杜比实验室、贝尔实验室、Sony、Nokia等公司共同开发。出现于1997年,为一种基于MPEG…

HTML生日蛋糕

目录 写在前面 完整代码 下载代码 代码分析 系列文章 写在最后 写在前面 HTML实现的生日蛋糕来喽,小编亲测,发给好友可以直接打开哦。在代码的第183行可以写下对朋友的祝福,快拿去送给你的好朋友吧! 完整代码 <!DOCTYPE html> <html lang="en"…

OAuth 2.0 授权流程详解与 FastAPI 实现

在现代网络应用中&#xff0c;OAuth 2.0 已成为授权和认证的标准协议。它允许用户将访问权限授予第三方应用&#xff0c;而无需暴露自己的用户名和密码。本文将详细介绍 OAuth 2.0 的常见授权流程&#xff0c;并展示如何在 FastAPI 中实现这些流程。 OAuth 2.0 简介 OAuth 2…

N-152基于java贪吃蛇游戏5

开发工具eclipse,jdk1.8 文档截图&#xff1a; N-152基于java贪吃蛇游戏5

强!70.3K star ! 推荐一款功能强大、开源、可视化的性能实时监控系统:Netdata

在当今复杂多变的IT环境中&#xff0c;系统性能的实时监控与分析对于确保业务连续性、系统稳定运行以及快速故障排查至关重要。随着云计算、大数据和微服务架构的普及&#xff0c;对监控系统的要求也日益增高。 今天给大家推荐一款性能监控工具为:Netdata。 它作为一款开源、…

手撕Python之正则

1.正则和re模块的联系 正则表达式是一种通用的用来简洁表达一组字符串的表达式&#xff0c;利用正则表达式可以方便快捷的匹配和筛选字符串 举个例子&#xff1a;在一堆数据中进行电话号码的寻找&#xff0c;我们需要根据电话号码的特征在这一堆数据进行电话的寻找&#xff0…

Nginx之日志切割,正反代理,HTTPS配置

1 nginx日志切割 1.1 日志配置 在./configure --prefixpath指定的path中切换进去&#xff0c;找到log文件夹&#xff0c;进去后找到都是对应的日志文件 其中的nginx.pid是当前nginx的进程号&#xff0c;当使用ps -ef | grep nginx获得就是这个nginx.pid的值 在nginx.conf中…

把哈希表换成 tire 树,居然为公司省下了几千万

你有没有想过,仅仅省下1%的计算资源,能为一家大公司带来多大的影响?你可能觉得,1%听起来微不足道,完全不值得一提。但今天我们聊一下一个技术优化点,就是关于如何通过微小的优化,Cloudflare这样的大型网络公司如何省下了大量的计算资源,背后还有不少值得我们学习的智慧…

OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 查找一个点集的凸包。 函数 cv::convexHull 使用斯克拉斯基算法&#xff08;Sklansky’s algorithm&#xff09;来查找一个二维点集的凸包&#…

MATLAB实现PID参数自动整定

目录 1、项目说明 2、文件说明 1、项目说明 本项目旨在通过 MATLAB 语言实现 PID 参数的自动整定&#xff0c;并设计了一个直观易用的 GUI 界面。该系统特别适用于实验室环境下的 PID 参数自整定任务。整定的核心原则在于优化系统性能&#xff0c;使系统的衰减比尽可能接近理…

数据仓库理论知识

1、数据仓库的概念 数据仓库&#xff08;英文&#xff1a;Date Warehouse&#xff0c;简称数仓、DW&#xff09;&#xff0c;是一个用于数据存储、分析、报告的数据系统。数据仓库的建设目的是面向分析的集成化数据环境&#xff0c;其数据来源于不同的外部系统&#…

在AD域中恢复被删除的账户(LDP.EXE)

在域账户被不小心删除后&#xff0c;客户端使用域账号登陆会失败&#xff0c;账号不存在&#xff1b; 为了客户端登陆回原来账户文件下面&#xff0c;重新创建一个相同账户&#xff0c;域中此新账号的ID是新的&#xff0c;客户端登陆也会按新用户生成用户文件&#xff1b;同样复…

基于SpringBoot的求职招聘管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的求职招聘管理系统…

【精选】文件摆渡系统:跨网文件传输的安全与效率之选

文件摆渡系统可以解决哪些问题&#xff1f; 文件摆渡系统&#xff08;File Shuttle System&#xff09;主要是应用于不同网络、网段、区域之间的文件数据传输流转场景&#xff0c; 用于解决以下几类问题&#xff1a; 文件传输问题&#xff1a; 大文件传输&#xff1a;系统可…