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

admin2024-09-11  3

目录

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类型。

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

库的安装

点击项目

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

 点击管理NuGet程序包

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

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

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

报错问题

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 测试结果

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

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

3. 备注

>>>>>>

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

>>>>>>

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

 >>>>>>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!