目录
1. 前言
2. 正文
2.1 问题
2.2 解决办法
2.2.1 思路
2.2.2 代码实现
2.2.3 测试结果
3. 备注
天气晚来秋,这几天天气变凉了,各位同学注意好多穿衣服。回归正题
由于需要,需要将json的配置里面的调理解析出来,做成接口,以便于开发。
会给到目录里面一个json的文件,然后固定格式,你只要将读取到的内容写成接口。
刚开始准备用读取文件的方式,一个一个判断来着,结果,在网上搜索,发现了基于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 ,其为静态函数。所以当静态函数调用非静态函数时,会出现如上所示的错误。
至于如果大家在开发过程中遇到其他的问题,要冷静分析,查阅资料。
// 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);
}
}
}
测试结果,也是直接读取到了我们想要的内容。
>>>>>>
一段路,一段成长,一次经历,一次改变,成功或许很遥远,但是我们都是追梦人。
>>>>>>
我的努力求学没有得到别的好处,只不过是愈来愈发觉自己的无知。——笛卡儿
>>>>>>
制作不易,且行且珍惜,点个关注支持下吧。