C# 获取config文件 实体转换

时间:2023-03-08 22:17:20
C# 获取config文件 实体转换

随着项目的扩展,单独的key,value配置文件已经不能满足需求了

这里需要自定义配置节点,例如

   <!--自定义  具体实体类配置问节点信息-->
<School Name="红旗小学" Number="" Address="北京市,西城区……"></School>

当然,这样的节点可以有多重获取方式,讲自己认为比较好的方式总结一下,仅供参考

可以将当前节点当做试题Model来配置,这样方便管理和操作,下面说明下如何进行转换

1、首先定义实体,因为需要转换,这里用到了configSections的section 节点,配置实体的命名空间

然后试题还需要继承ConfigurationSection类

 namespace Model
{
/// <summary>
/// 学校实体
/// </summary>
public class School : ConfigurationSection
{
//获取属性名称
[ConfigurationProperty("Name", IsRequired = false)]
public string Name
{
get
{
//返回配置文件属性值
return this["Name"].ToString();
}
}
[ConfigurationProperty("Number", IsRequired = false)]
public int Number
{
get
{
int i = ;
int.TryParse(this["Number"].ToString(), out i);
return i;
}
}
[ConfigurationProperty("Address", IsRequired = false)]
public string Address
{
get
{
return this["Address"].ToString();
}
}
}
}

2、理由ExeConfigurationFileMap类将自定义配置文件转换为Configuration类

然后从Configuration类中获取section节点属性,转换为Model实体进行返回

  #region 初始化配置

         /// <summary>
/// 初始化配置文件
/// </summary>
private static void ConfigDataLoad()
{
//获取文件路径
string fileName = AppDomain.CurrentDomain.BaseDirectory + @"Configuration\TestModel.config";
if (File.Exists(fileName))
{
ExeConfigurationFileMap file = new ExeConfigurationFileMap
{
ExeConfigFilename = fileName
};
//将文件转换为Configuration
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); //初始化对象
SetCustomModel(config);
}
else
{
throw new Exception("配置文件不存在");
}
}
/// <summary>
/// 初始化值配置文件为实体Model
/// </summary>
private static void SetCustomModel(Configuration config)
{
_school = ((School)config.GetSection("School"));
}
#endregion

完整帮助类代码如下

     /// <summary>
/// 自定义配置文件 实体转换
/// </summary>
public class ConfigToModelHelper
{
#region 初始化自定义节点为Model
private static School _school;
public static School School
{
get
{
if (_school == null)
{
ConfigDataLoad();
}
return _school;
}
}
#endregion #region 初始化配置 /// <summary>
/// 初始化配置文件
/// </summary>
private static void ConfigDataLoad()
{
//获取文件路径
string fileName = AppDomain.CurrentDomain.BaseDirectory + @"Configuration\TestModel.config";
if (File.Exists(fileName))
{
ExeConfigurationFileMap file = new ExeConfigurationFileMap
{
ExeConfigFilename = fileName
};
//将文件转换为Configuration
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None); //初始化对象
SetCustomModel(config);
}
else
{
throw new Exception("配置文件不存在");
}
}
/// <summary>
/// 初始化值配置文件为实体Model
/// </summary>
private static void SetCustomModel(Configuration config)
{
_school = ((School)config.GetSection("School"));
}
#endregion }

调用:

  School school = ConfigToModelHelper.School;