1.前提
有一个QQ机器人的挂机项目,写个dll插件,配置文件由于懒得使用数据库就设置了JSON文件作为配置文件,C#的JSON文件解析还是比较麻烦的,也踩了不少坑
2.安装Newtonsoft.Json
推荐使用Visual Studio自带的NuGet包管理安装就好,装好之后项目里面包含一下以下命名空间
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.IO;
using System;
3.踩坑过程
json文件的创建
网上不少教程都是推荐使用File.Create(Json_EventPath)这个函数,我在使用之后发现好像不仅无法创建文件,后期去读取这个文件还会提示,改文件被另一个进程占用,所以我使用了File.Create(Json_EventPath)
加文件流的形式来创建文件了,附上代码
string Json_EventPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"config.json");
if (!File.Exists(Json_EventPath))
{
using (FileStream fs = File.Create(Json_EventPath))
{
string newFile = "{[\"A\":\"a\"]}";
JArray array = (JArray)JsonConvert.DeserializeObject(newFile);
var jsonToOutput = JsonConvert.SerializeObject(array, Formatting.Indented);
byte[] info = new UTF8Encoding(true).GetBytes(jsonToOutput);
// add some information to the file.
fs.Write(info, 0, info.Length);
}
}
上面先设置了json文件的存放路径,接着讲string格式的文件转成JArray的格式,在将JArray逆序列化,最后使用文件流写成文件。
json键值对修改和取值
修改json的键值对,这个没什么好说的,先直接上代码
private void change()
{
string josnString = File.ReadAllText(Json_EventPath, Encoding.UTF8);
int index = dataGridView1.CurrentRow.Index;
var jo = JArray.Parse(josnString);
jo[index]["A"] = A.Text;
jo[index]["B"] = B.Text;
jo[index]["C"] = C.Text;
jo[index]["D"] = D.Text;
var jsonToOutput = JsonConvert.SerializeObject(jo, Formatting.Indented);
byte[] info = new UTF8Encoding(true).GetBytes(jsonToOutput);
// add some information to the file.
using (FileStream fs = File.Create(Json_EventPath))
{
fs.Write(info, 0, info.Length);
}
}
和新加文件差不多的操作,由于我是用的dataGridView控件来显示json的数据,所以我先获取了当前在dataGridView控件里面用户的选中行的索引,接着用文件流的形式读取配置文件,然后对读取出来的string格式用JArray去解析,之后就可以选择JArray jo[index][key]
这样的形式对其中需要修改的键值对进行修改了,当然,如果你需要取值,也可以做类似的操作,稍微适当修改一下代码。
json键值对删除
删除键值对和修改取值是基本类似操作,先上代码
private void b_delete()
{
string josnString = File.ReadAllText(Json_EventPath, Encoding.UTF8);
var jo = JArray.Parse(josnString);
int index = dataGridView1.CurrentRow.Index;
jo[index].Remove();
var jsonToOutput = JsonConvert.SerializeObject(jo, Formatting.Indented);
byte[] info = new UTF8Encoding(true).GetBytes(jsonToOutput);
// add some information to the file.
using (FileStream fs = File.Create(Json_EventPath))
{
fs.Write(info, 0, info.Length);
}
}
和上面修改取值部分同理,读取并且转换成JArray形式之后,调用JArray里面的Remove方法直接就可以删除当前键值对,然后就是正常的写文件操作即可。
附加
关于JObject和JArray的理解,如果你json里面是单一的键值对,就可以使用JObject来解析,如果像我一样里面是个json数组的话,就需要使用JArray来解析操作了。
关于例程,有时间我上传放上来。
13 条评论
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车即将上线 真正的项目,期待你的参与
这篇文章提供了宝贵的经验和见解,对读者有很大的启发和帮助。
平淡中见真章,质朴处显功力。
真好呢
兄弟写的非常好 https://www.cscnn.com/
想想你的文章写的特别好https://www.ea55.com/
怎么收藏这篇文章?
看的我热血沸腾啊https://www.jiwenlaw.com/
博主真是太厉害了!!!