C# 获取config文件 实体转换

摘要:
E、 g.1<16} 17}18[ConfigurationProperty(“Number”;24int.TryParse(this[“Number”].ToString();26}27}28[配置属性(“地址”;

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

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

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

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

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

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

然后试题还需要继承ConfigurationSection类

 1 namespace Model
 2 {
 3     /// <summary>
 4     /// 学校实体
 5     /// </summary>
 6     public class School : ConfigurationSection
 7     {
 8         //获取属性名称
 9         [ConfigurationProperty("Name", IsRequired = false)]
10         public string Name
11         {
12             get
13             {
14                 //返回配置文件属性值
15                 return this["Name"].ToString();
16             }
17         }
18         [ConfigurationProperty("Number", IsRequired = false)]
19         public int Number
20         {
21             get
22             {
23                 int i = 0;
24                 int.TryParse(this["Number"].ToString(), out i);
25                 return i;
26             }
27         }
28         [ConfigurationProperty("Address", IsRequired = false)]
29         public string Address
30         {
31             get
32             {
33                 return this["Address"].ToString();
34             }
35         }
36     }
37 }

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

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

 1  #region 初始化配置
 2 
 3         /// <summary>
 4         /// 初始化配置文件
 5         /// </summary>
 6         private static void ConfigDataLoad()
 7         {
 8             //获取文件路径
 9             string fileName = AppDomain.CurrentDomain.BaseDirectory + @"ConfigurationTestModel.config";
10             if (File.Exists(fileName))
11             {
12                 ExeConfigurationFileMap file = new ExeConfigurationFileMap
13                 {
14                     ExeConfigFilename = fileName
15                 };
16                 //将文件转换为Configuration
17                 Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);
18 
19                 //初始化对象
20                 SetCustomModel(config);
21             }
22             else
23             {
24                 throw new Exception("配置文件不存在");
25             }
26         }
27         /// <summary>
28         /// 初始化值配置文件为实体Model
29         /// </summary>
30         private static void SetCustomModel(Configuration config)
31         {
32             _school = ((School)config.GetSection("School"));
33         }
34         #endregion

完整帮助类代码如下

 1     /// <summary>
 2     /// 自定义配置文件 实体转换
 3     /// </summary>
 4     public class ConfigToModelHelper
 5     {
 6         #region  初始化自定义节点为Model
 7         private static School _school;
 8         public static School School
 9         {
10             get
11             {
12                 if (_school == null)
13                 {
14                     ConfigDataLoad();
15                 }
16                 return _school;
17             }
18         }
19         #endregion
20 
21 
22         #region 初始化配置
23 
24         /// <summary>
25         /// 初始化配置文件
26         /// </summary>
27         private static void ConfigDataLoad()
28         {
29             //获取文件路径
30             string fileName = AppDomain.CurrentDomain.BaseDirectory + @"ConfigurationTestModel.config";
31             if (File.Exists(fileName))
32             {
33                 ExeConfigurationFileMap file = new ExeConfigurationFileMap
34                 {
35                     ExeConfigFilename = fileName
36                 };
37                 //将文件转换为Configuration
38                 Configuration config = ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);
39 
40                 //初始化对象
41                 SetCustomModel(config);
42             }
43             else
44             {
45                 throw new Exception("配置文件不存在");
46             }
47         }
48         /// <summary>
49         /// 初始化值配置文件为实体Model
50         /// </summary>
51         private static void SetCustomModel(Configuration config)
52         {
53             _school = ((School)config.GetSection("School"));
54         }
55         #endregion
56 
57     }

调用:

1  School school = ConfigToModelHelper.School;

免责声明:文章转载自《C# 获取config文件 实体转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Edge Extraction 边缘提取网站HTTP升级HTTPS完全配置手册下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

下拉菜单(css)

<!DOCTYPE html><html> <head>  <meta charset="utf-8" />  <title></title>  <style type="text/css">   *{margin:0;padding:0;}   #nav{backgrou...

eclipse,sts怎么把多个微服务或者多个项目备份到码云的同一个仓库下进行管理

观前提示 第一部分:提交方法 第二部分:可能出现的错误和解决方法 第三部分:自己的尝试过程 -----------------------------------------------------------第一部分-------------------------------------------------------- 前提:无法在eclipse...

layui--入门(helloWorld)

具体可参考官方文档:https://www.layui.com/doc/ 由于引入layui 需要用到node.js 安装过程可参考: https://www.cnblogs.com/liuchenxing/p/8036384.html layui--入门(helloWorld)  1.首先官网首页下载 layui  https://www.layui.c...

为什么C++,中字符串不能修改

因为在c++中,字符串为常量,所以不能修改,在python中字符串也是不可以修改的。  可以修改字符串 char* name ="sdfsfs"  这样的不能修改,因为这是一个指针 char name[] = "sdfsf" 这样的可以修改,因为这是一个数组 #include <stdio.h> int main() { char...

WPF DataContext与Binding的关系

在前台UI创建一个Label绑定到myLabel <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsof...

文件上传inputstream转为multipartfile

方式一 CommonsMultipartFile pom <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</g...