首先安装包:
该包提供的yaml的序列化,和反序列化功能。
新建一个cs文件管理你的配置数据结构如:
? public class SeriaInfo
? ? {
? ? ? ? // Com 端口
? ? ? ? public string port { get; set; } = "";
? ? ? ? //波特率
? ? ? ? public string baudRate { get; set; } = "无(None)";
? ? ? ? //奇偶校验位
? ? ? ? public int parity { get; set; } = 0;
? ? ? ? //数据位
? ? ? ? public int dataBits { get; set; } = 8;
? ? ? ? //停止位
? ? ? ? public int stopBits { get; set; } = 1;
? ? ? ? //字节编码
? ? ? ? public int encoding { get; set; } = 0;
? ? }
? ? public class ModbusInfo
? ? {
? ? l? ? public string ip { get; set; } = "192.168.1.199";
? ? ? ? public int port { get; set; } = 502;
? ? ? ? public int slave_addr { get; set; } = 1;
? ? ? ? public ushort start_addr { get; set; } = 8010;
? ? ? ? //表示数据完成传输
? ? ? ? public ushort done_addr { get; set; } = 8000;
? ? }
? ? //-------------主信息类
? ? public class ConfigInfos
? ? {
? ? ? ? public List<SeriaInfo> list_seriaInfo { get; set; } = new List<SeriaInfo>();
? ? ? ? public ModbusInfo modbusInfo { get; set; } = new ModbusInfo();
? ? }
有了这个类对象,序列化出来的yaml文件,应该是这个样子的:
list_seriaInfo:
- port: COM7
baudRate: 115200
parity: 0
dataBits: 0
stopBits: 0
encoding: 0
- port: COM8
baudRate: 115200
parity: 0
dataBits: 0
stopBits: 0
encoding: 0
- port: COM9
baudRate: 115200
parity: 0
dataBits: 0
stopBits: 0
encoding: 0
- port: COM10
baudRate: 115200
parity: 0
dataBits: 0
stopBits: 0
encoding: 0
modbusInfo:
ip: 127.0.0.1
port: 502
slave_addr: 1
start_addr: 8010
done_addr: 8000
同理,该文件序列化之后,应该得到上面这个类对象。
然后,我们准备一个工具类ConfigCtrl用来序列化和反序列化:
public class ConfigCtrl
{
static string yaml_path = Directory.GetCurrentDirectory() + @"\Config\config.yaml";
/// <summary>
/// 序列化操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
static public void Save<T>(T obj)
{
FileInfo fi = new FileInfo(yaml_path);
if (!Directory.Exists(fi.DirectoryName))
{
Directory.CreateDirectory(fi.DirectoryName);
}
StreamWriter yamlWriter = File.CreateText(yaml_path);
Serializer yamlSerializer = new Serializer();
yamlSerializer.Serialize(yamlWriter, obj);
yamlWriter.Close();
}
/// <summary>
/// 泛型反序列化操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
/// <exception cref="FileNotFoundException"></exception>
static public T Read<T>()
{
if (!File.Exists(yaml_path))
{
return default(T);
}
StreamReader yamlReader = File.OpenText(yaml_path);
Deserializer yamlDeserializer = new Deserializer();
//读取持久化对象
T info = yamlDeserializer.Deserialize<T>(yamlReader);
yamlReader.Close();
return info;
}
}
最后是,使用工具类:
// 反序列化
var obj = ConfigCtrl.Read<ConfigInfos>();
if (obj == null)
{
MessageBox.Show("配置文件不存在");
}
//序列化
ConfigCtrl.Save<ConfigInfos>(obj);
|