• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 详解在.net中读写config文件的各种方法

详解在.net中读写config文件的各种方法

作者:Fish Li 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Fish Li通过本文主要向大家介绍了.net web.config,battle.net.config,net config,net config server,log4net.config等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

今天谈谈在.net中读写config文件的各种方法。 在这篇博客中,我将介绍各种配置文件的读写操作。 由于内容较为直观,因此没有过多的空道理,只有实实在在的演示代码, 目的只为了再现实战开发中的各种场景。希望大家能喜欢。

通常,我们在.NET开发过程中,会接触二种类型的配置文件:config文件,xml文件。 今天的博客示例也将介绍这二大类的配置文件的各类操作。 在config文件中,我将主要演示如何创建自己的自定义的配置节点,而不是介绍如何使用appSetting 。

请明:本文所说的config文件特指app.config或者web.config,而不是一般的XML文件。 在这类配置文件中,由于.net framework已经为它们定义了一些配置节点,因此我们并不能简单地通过序列化的方式去读写它。

config文件 - 自定义配置节点

为什么要自定义的配置节点?

确实,有很多人在使用config文件都是直接使用appSetting的,把所有的配置参数全都塞到那里,这样做虽然不错, 但是如果参数过多,这种做法的缺点也会明显地暴露出来:appSetting中的配置参数项只能按key名来访问,不能支持复杂的层次节点也不支持强类型, 而且由于全都只使用这一个集合,你会发现:完全不相干的参数也要放在一起!

想摆脱这种困扰吗?自定义的配置节点将是解决这个问题的一种可行方法。

首先,我们来看一下如何在app.config或者web.config中增加一个自定义的配置节点。 在这篇博客中,我将介绍4种自定义配置节点的方式,最终的配置文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MySection111" type="RwConfigDemo.MySection1, RwConfigDemo" />
    <section name="MySection222" type="RwConfigDemo.MySection2, RwConfigDemo" />
    <section name="MySection333" type="RwConfigDemo.MySection3, RwConfigDemo" />
    <section name="MySection444" type="RwConfigDemo.MySection4, RwConfigDemo" />
  </configSections>

  <MySection111 username="fish-li" url="http://www.weikejianghu.com/"></MySection111>

  <MySection222>
    <users username="fish" password="liqifeng"></users>
  </MySection222>

  <MySection444>
    <add key="aa" value="11111"></add>
    <add key="bb" value="22222"></add>
    <add key="cc" value="33333"></add>
  </MySection444>

  <MySection333>
    <Command1>
      <![CDATA[
        create procedure ChangeProductQuantity(
          @ProductID int,
          @Quantity int
        )
        as
        update Products set Quantity = @Quantity 
        where ProductID = @ProductID;
      ]]>
    </Command1>
    <Command2>
      <![CDATA[
        create procedure DeleteCategory(
          @CategoryID int
        )
        as
        delete from Categories
        where CategoryID = @CategoryID;
      ]]>
    </Command2>
  </MySection333>  
</configuration>
</div>

同时,我还提供所有的示例代码(文章结尾处可供下载),演示程序的界面如下:

config文件 - Property

先来看最简单的自定义节点,每个配置值以属性方式存在:

<MySection111 username="fish-li" url="http://www.weikejianghu.com/"></MySection111>
</div>

实现代码如下:

public class MySection1 : ConfigurationSection
{
  [ConfigurationProperty("username", IsRequired = true)]
  public string UserName
  {
    get { return this["username"].ToString(); }
    set { this["username"] = value; }
  }

  [ConfigurationProperty("url", IsRequired = true)]
  public string Url
  {
    get { return this["url"].ToString(); }
    set { this["url"] = value; }
  }
}
</div>

小结:

1. 自定义一个类,以ConfigurationSection为基类,各个属性要加上[ConfigurationProperty] ,ConfigurationProperty的构造函数中传入的name字符串将会用于config文件中,表示各参数的属性名称。

2. 属性的值的读写要调用this[],由基类去保存,请不要自行设计Field来保存。

3. 为了能使用配置节点能被解析,需要在<configSections>中注册: <section name="MySection111" type="RwConfigDemo.MySection1, RwConfigDemo" /> ,且要注意name="MySection111"要与<MySection111 ..... >是对应的。

说明:下面将要介绍另三种配置节点,虽然复杂一点,但是一些基础的东西与这个节点是一样的,所以后面我就不再重复说明了。

config文件 - Element

再来看个复杂点的,每个配置项以XML元素的方式存在:

<MySection222>
  <users username="fish" password="liqifeng"></users>
</MySection222>
</div>

实现代码如下:

public class MySection2 : ConfigurationSection
{
  [ConfigurationProperty("users", IsRequired = true)]
  public MySectionElement Users
  {
    get { return (MySectionElement)this["users"]; }
  }
}

public class MySectionElement : ConfigurationElement
{
  [ConfigurationProperty("username", IsRequired = true)]
  public string UserName
  {
    get { return this["username"].ToString(); }
    set { this["username"] = value; }
  }

  [ConfigurationProperty("password", IsRequired = true)]
  public string Password
  {
    get { return this["password"].ToString(); }
    set { this["password"] = value; }
  }
}

</div>

小结:

1. 自定义一个类,以ConfigurationSection为基类,各个属性除了要加上[ConfigurationProperty] 

2. 类型也是自定义的,具体的配置属性写在ConfigurationElement的继承类中。

config文件 - CDATA

有时配置参数包含较长的文本,比如:一段SQL脚本,或者一段HTML代码,那么,就需要CDATA节点了。假设要实现一个配置,包含二段SQL脚本:

<MySection333>
  <Command1>
    <![CDATA[
      create procedure ChangeProductQuantity(
        @ProductID int,
        @Quantity int
      )
      as
      update Products set Quantity = @Quantity 
      where ProductID = @ProductID;
    ]]>
  </Command1>
  <Command2>
    <![CDATA[
      create procedure DeleteCategory(
        @CategoryID int
      )
      as
      delete from Categories
      where CategoryID = @CategoryID;
    ]]>
  </Command2>
</MySection333>
</div>

实现代码如下:

public class MySection3 : ConfigurationSection
{
  [ConfigurationProperty("Command1", IsRequired = true)]
  public MyTextElement Command1
  {
    get { return (MyTextElement)this["Command1"]; }
  }

  [ConfigurationProperty("Command2", IsRequired = true)]
  public MyTextElement Command2
  {
    get { return (MyTextElement)this["Command2"]; }
  }
}

public class MyTextElement : ConfigurationElement
{
  protected override void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey)
  {
    CommandText = reader.ReadElementContentAs(typeof(string), null) as string;
  }
  protected override bool SerializeElement(System.Xml.XmlWriter writer, bool serializeCollectionKey)
  {
    if( writer != null )
      writer.WriteCData(CommandText);
    return true;
  }

  [ConfigurationProperty("data", IsRequired = false)]
  public string CommandText
  {
    get { return this["data"].ToString(); }
    set { this["data"] = value; }
  }
}

</div>

小结:

1. 在实现上大体可参考MySection2,

2. 每个ConfigurationEleme

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 详解在.net中读写config文件的各种方法
  • ASP.NET web.config中数据库连接字符串connectionStrings节的配置方法

相关文章

  • 2017-05-11ASP.NET之Response.Cookies.Remove 无法删除COOKIE的原因
  • 2017-05-11ASP.NET 链接 Access 数据库路径问题最终解决方案
  • 2017-05-11利用ASP.NET MVC和Bootstrap快速搭建个人博客之后台dataTable数据列表
  • 2017-05-11浅谈VS中的DataPager分页
  • 2018-08-20.Net Web Api中利用FluentValidate进行参数验证的方法
  • 2017-05-11asp.net中在用ajax格式传递数据到aspx页面时出现乱码
  • 2017-05-11asp.net 数据绑定 使用eval 时候报 字符文本中的字符太多 问题的解决方法
  • 2017-05-11ASP.NET通过自定义函数实现对字符串的大小写切换功能
  • 2017-05-11asp.net 支持多语言站点的实现方法
  • 2017-05-11ASP.NET(C#)实现一次性动态上传多张图片的代码(多个文件)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • asp.Net 中获取一周第一天,一月第一天等实现代码
    • 使CheckBoxList的Attributes属性生效(修改微软的一个bug)
    • asp.net 中静态方法和动态方法调用的区别实例分析
    • 用WPF实现屏幕文字提示的实现方法
    • 对GridView的行加颜色并弹出Kindeditor的实现思路
    • asp.net System.Net.Mail 发送邮件
    • FileUpload上传图片前实现图片预览功能(附演示动画)
    • 扩展 Entity Framework支持复杂的过滤条件(多个关键字模糊匹配)
    • asp.net实现在XmlTextWriter中写入一个CDATA的方法
    • iis中为每个应用程序池单独设置aspnet.config配置文件

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有