zoukankan      html  css  js  c++  java
  • C# 获取config文件 实体转换

    随着项目的扩展,单独的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;
  • 相关阅读:
    用新版本的job打成jar包在终端运行mapreduce程序遇到的问题 找不到Map class?
    在map端使用关联数组实现wordcount
    基数排序c++实现
    (sql补充)关于锁
    (sql server补充)关于事务
    (sql补充)关于游标
    java api文档的阅读技巧
    android开发学习路线图
    (sql补充)关于索引
    Android开发之学习路线
  • 原文地址:https://www.cnblogs.com/happygx/p/9406058.html
Copyright © 2011-2022 走看看