我们开发程序常用到配置文件保存一些数据,过去一般使用ini格式文件,例如:
[食品]
早餐=油条,包子,稀饭
这个只能保存简单的数据。对于复杂一些的数据,我们可以采用json格式来保存,我写了个便捷的配置文件助手分享给大家,希望给大家带来帮助!
首先,再项目中安装Nuget包:Newtonsoft.Json
然后将创建代码文件:
public class iniJson
{
public string FileName;
/// <summary>
/// 构造函数HHF
/// </summary>
/// <param name="iniJsonFile">Ini文件路径</param>
public iniJson(string iniJsonFile)
{
this.FileName = iniJsonFile;
}
/// <summary>
/// 保存、修改json值
/// </summary>
/// <param name="jdPath">节点路径a.b.c.key,最后一个是key</param>
/// <param name="val">各种值,如果为null则删除这个key</param>
public void jSave(string jdPath, object val)
{
//jPath格式:abc.ddd.eee,最后一个是key
string alltxt = "";
try
{
alltxt = File.ReadAllText(FileName);
}
catch { }
JObject jall = new JObject();
try
{
jall = JObject.Parse(alltxt);
}
catch { }
JToken token = jall;
string[] mObject = jdPath.Split('.');
for (int i = 0; i < mObject.Length - 1; i++)
{
string segment = mObject[i];
JToken child = token[segment];
if (child == null)
{
JObject newObject = new JObject();
token[segment] = newObject;
token = newObject;
}
else
{
token = child;
}
}
string lastmObject = mObject[mObject.Length - 1];
if (val != null)
{
token[lastmObject] = JToken.FromObject(val);
}
else
{
token[lastmObject].Parent.Remove();
}
string directoryPath = Path.GetDirectoryName(FileName);
if (!Directory.Exists(directoryPath))
{//阿弥陀佛,自动检测并创建文件夹
Directory.CreateDirectory(directoryPath);
}
using (StreamWriter FileWriter = new StreamWriter(FileName, false))
{
FileWriter.WriteLine(jall.ToString());
}
}
public void jDelete(string jdPath)
{
jSave(jdPath, null);
}
public dynamic jRead(string jdPath)
{
string alltxt = "";
try
{
alltxt = File.ReadAllText(FileName);
}
catch { }
JObject jall = new JObject();
try
{
jall = JObject.Parse(alltxt);
}
catch { }
var r = jall.SelectToken(jdPath);
return r == null ? default : r.ToObject<dynamic>();
}
public string jReadText(string jdPath)
{
return Convert.ToString(jRead(jdPath));
}
}
用法:
//配置文件的路径
string path = "abc/set.ini";
//初始化助手
iniJson ij = new iniJson(path);
ij.jSave("介绍.说明", "这是一个简单的json格式配置文件");
ij.jSave("介绍.注意事项", "多吃素食,身体健康");
JObject yt = new JObject();
yt.Add("大油条", "3元");
yt.Add("小油条", "2元");
JObject youtiao = new JObject();
youtiao.Add("油条", yt);
JArray zao = new JArray();
zao.Add(youtiao);
zao.Add("包子");
zao.Add("稀饭");
ij.jSave("饮食.早餐", zao);
JObject jg = new JObject();
jg.Add("价格", 12);
JArray wu = new JArray();
wu.Add("香菇青菜");
wu.Add("酸辣土豆丝");
wu.Add("手撕包菜");
ij.jSave("饮食.午餐", wu);
JArray wan = new JArray();
wan.Add("绿豆粥");
wan.Add("南瓜粥");
ij.jSave("饮食.晚餐", wan);
//文本类型
{
//读取
string val = ij.jReadText("介绍.注意事项");
}
//数字类型
{
//保存
ij.jSave("数字", 1);
//读取
int val = (int)ij.jRead("数字");
}
//布尔类型
{
//保存
ij.jSave("是否",true);
//读取
bool val = (bool)ij.jRead("是否");
}
//对于含有数据数据的读取
//读取大油条价格,注意[0]表示早餐数组中的第1组
string dytPrice = ij.jReadText("饮食.早餐.[0].油条.大油条");
运行以后即可将相关数据保存到指定的配置文件中,其配置文件内容为:
{
"介绍": {
"说明": "这是一个简单的json格式配置文件",
"注意事项": "多吃素食,身体健康"
},
"饮食": {
"早餐": [
{
"油条": {
"大油条": "3元",
"小油条": "2元"
}
},
"包子",
"稀饭"
],
"午餐": [
"香菇青菜",
"酸辣土豆丝",
"手撕包菜"
],
"晚餐": [
"绿豆粥",
"南瓜粥"
]
},
"数字": 1,
"是否": true
}
怎么样,这样就把比较复杂的数据保存到本地文件中了,读取也很方便。