C#保存读取JSON文件
使用WinForm演示,重点在于类的使用。
最近新文章:C#Winform批量获取CSV内容展示,并保存
目录
最近个把月有点忙,写的少了,本来打算这个月写两篇的,结果忙完之后又光顾着玩了,老懒狗了,今天有些空,想了想写啥东西,差不多想了一些就写这个了。
演示效果:
保存路径在运行文件根目录,默认在debug里,实际就根据自己运行配置找到在哪。
这个功能可以在不开放源码,又需求更改一些标题或显示内容时使用,比如工业上客户要改显示标题内容、与PLC交互的地址可更改等等。
正文:
一、控件和类介绍
窗体这边使用的是两个窗体,分别为Form1主窗体,Form2配置标题内容的窗体。
文章使用3个类,分别为:Config配置类,FileSerialization序列化类,Entity实体类。
Config配置类:用来写可配置的标题和内容。
FileSerialization序列化类:要用到的Json内容的相关引用。
Entity实体类:Config配置类和FileSerialization序列化类的“合体”方法,作用是方便在窗体中使用这些方法。
这些看一下就行了。
二、窗体界面和代码
1.Form1窗体界面和代码展示
界面如下:
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyDemoConfig
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
private void Form1_Load(object sender, EventArgs e)
{
Entity.ReadConfig();//要先读取配置文件
lbl_Title.Text = Entity.config.CurrentConfig.Title;//标题
lbl_Content.Text = Entity.config.CurrentConfig.Content;//内容
}
}
}
2.Form2窗体界面和代码展示
界面如下:
代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MyDemoConfig
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
//propertyGrid控件内容等于config的配置内容
this.propertyGrid1.SelectedObject = Entity.config.CurrentConfig;
}
//关闭Form2窗体保存配置内容
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
Entity.SaveConfig();
}
}
}
三、重点★:3个类的代码
1.Config配置类:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyDemoConfig
{
public class Config
{
public Config()
{
CurrentConfig = new CurrentConfig();
}
//系统基本参数
public CurrentConfig CurrentConfig { get; set; }
}
/// <summary>
/// 系统参数类
/// </summary>
public class CurrentConfig
{
[Category("1基本"), DisplayName("标题")] public string Title { get; set; }
[Category("2基本"), DisplayName("内容")] public string Content { get; set; }
}
}
2.FileSerialization序列化类:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyDemoConfig
{
/// <summary>
/// 序列化类(Json)
/// </summary>
public class FileSerialization
{
/// <summary>
/// 从类序列化到文件
/// </summary>
/// <param name="obj">要序列化的对象</param>
/// <param name="jsonFile">保存路径</param>
public static void JsonSerialize(object obj, string jsonFile)
{
if (obj == null) return;
File.WriteAllText(jsonFile, JObject.Parse(JsonConvert.SerializeObject(obj)).ToString());
}
/// <summary>
/// 从文件反序列化到类
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonFile">文件路径</param>
/// <returns></returns>
public static T JsonDeserialize<T>(string jsonFile)
{
if (!File.Exists(jsonFile)) return default(T);
return (T)JsonConvert.DeserializeObject<T>(File.ReadAllText(jsonFile));
}
}
}
3.Entity实体类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyDemoConfig
{
public class Entity
{
public static Config config = new Config();
/// <summary>
/// 读取文件配置
/// </summary>
public static void ReadConfig()
{
config = FileSerialization.JsonDeserialize<Config>(AppDomain.CurrentDomain.BaseDirectory + "\\Config.json");
if (config == null) config = new Config();
}
/// <summary>
/// 保存文件配置
/// </summary>
public static void SaveConfig()
{
FileSerialization.JsonSerialize(config, AppDomain.CurrentDomain.BaseDirectory + "\\Config.json");
}
}
}
四、2023/6/28更新补充
新增文本框保存内容
在之前Form1主界面放入一个textbox控件,如图所示:
之后在Config配置类里命名一个公共的string类型变量,这里我默认它为字符串“?”,如图所示:
public string txt { get; set; } = "?";
之后我们给Form1窗体添加关闭事件FormClosing,在FormClosing事件里写上如图所示代码:
//添加的代码 请选择复制内容
textBox1.Text = Entity.config.txt;
Entity.config.txt = this.textBox1.Text;
Entity.SaveConfig();
其意思可理解为:在关闭Form1窗体时,配置的txt变量等于我们输入的textbox1的值,也就是把Form1窗体的textbox1控件的值写入JSON文件内保存;
而Form1窗体的Load事件添加的代码是为了每次加载Form1窗体时,我们保存在JSON文件内的数据传值到textbox1控件显示。
大伙理一下应该有所启发,可以把我示例的事件换成别的事件来保存和加载都可以。
最后textbox1控件保存内容的GIF:
总结
主要掌握类的运用,就可引用到其他项目中去。
谢谢观看。
更多推荐
所有评论(0)