如何在web.config中存储自定义对象-阿里云开发者社区

开发者社区> 技术小胖子> 正文

如何在web.config中存储自定义对象

简介:
+关注继续查看

原文:http://www.codeproject.com/Articles/184716/How-to-store-custom-objects-in-web-config.aspx

如何在web.config中存储自定义对象

在本文中将要讨论web.config.在我平日里,都习惯把一些数据放在web.config的appSettings节里,当需要时再读取。

 

那都是string字符串的形式。当然了不止这些,我们也可以通过编程方式修改这些数据。

现在重要的一点需要说的是,我们也可以在web.config里存放自定义的类型,虽然通常情况不这么做。但是在很多情形

 

下,这样做很有用。

大家是否尝试过修改或者添加过web.config里的一些数值。我们先简单的讨论下这个:

首先,这些都是平常常见到的,把一些常量数据放在web.config的appSettings节,根据需要读取。那么怎么读呢(对初学者):

 


  1. //数据存放在web.config中形如: 
  2.  
  3. <appSettings> 
  4.  
  5.         <add key="WelcomeMessage" value="Hello All, Welcome to my Website." /> 
  6.  
  7. </appSettings> 
  8.  
  9.  
  10.  
  11. // 读取 
  12.  
  13. string message = ConfigurationManager.AppSettings["WelcomeMessage"]; 

 

现在,要是想要通过程序修改appSettings,我们可以这样做:

 


  1. //修改 
  2.  
  3.         Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); 
  4.  
  5.         config.AppSettings.Settings["WelcomeMessage"].Value = "Hello All, Welcome to my updated site."
  6.  
  7.         config.Save(); 

接着,如果想要在web.config里增加数据怎么做呢,如下:

 


  1. //增加 
  2.  
  3.         Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); 
  4.  
  5.         config.AppSettings.Settings.Add("ErrorMessage", "An error has been occured during processing  
  6.  
  7.  
  8.  
  9. this request."); 
  10.  
  11.         config.Save(); 

上面的代码是在web.config里新增新的键值对。现在我们可以在应用程序的任何地方读取它了。

现在,摆在面前的问题是,我们是否可以在配置里存储自定义的数据。

当然可以...

我们可以存储对象。让我们一起来看看怎么做。

我创建了一个样例程序。在这个例子中,我在web.config文件里保存了一个自定义的NewError类的一个对象实例。同时

 

当需要时对其进行修改。

请按照下面的步骤开始实现它:-)

a)创建一个继承自ConfigurationSection(该类在System.Configuration空间可以找到)的类。每个属性(Porperty)必

 

须有一个属性(attribute)ConfigurationProperty(带有属性名和一些参数,这个名字会直接映射到web.config),让我

 

们看下NewError类:

 


  1. public class NewError:ConfigurationSection 
  2.  
  3.  
  4.     //译注:每一个属性(Porperty:get,set的那玩意;-))都对应有个属性Attribute【[ConfigurationProperty 】 
  5.  
  6.     [ConfigurationProperty ("Id",IsRequired = true)] 
  7.  
  8.     public string ErrorId { 
  9.  
  10.         get { return (string)this["Id"]; } 
  11.  
  12.         set { this["Id"] = value; } 
  13.  
  14.     } 
  15.  
  16.     [ConfigurationProperty("Message", IsRequired = false)] 
  17.  
  18.     public string Message { 
  19.  
  20.         get { return (string)this["Message"]; } 
  21.  
  22.         set { this["Message"] = value; } 
  23.  
  24.     } 
  25.  
  26.     [ConfigurationProperty("RedirectURL", IsRequired = false)] 
  27.  
  28.     public string RedirectionPage 
  29.  
  30.     { 
  31.  
  32.         get { return (string)this["RedirectURL"]; } 
  33.  
  34.         set { this["RedirectURL"] = value; } 
  35.  
  36.     } 
  37.  
  38.     [ConfigurationProperty("MailId", IsRequired = false)] 
  39.  
  40.     public string EmailId 
  41.  
  42.     { 
  43.  
  44.         get { return (string)this["MailId"]; } 
  45.  
  46.         set { this["MailId"] = value; } 
  47.  
  48.     } 
  49.  
  50.     [ConfigurationProperty("DateAdded", IsRequired = false)] 
  51.  
  52.     public DateTime DateAdded 
  53.  
  54.     { 
  55.  
  56.         get { return (DateTime)this["DateAdded"]; } 
  57.  
  58.         set { this["DateAdded"] = value; } 
  59.  
  60.     } 
  61.  

和你看到的一样,每个属性有属性Configuration及一些值,比如属性ErrorId:

 


  1. [ConfigurationProperty ("Id",IsRequired = true)] 

意思是ErrorId在web.config里存为Id而且不可以缺少的必要字段。还有一些可选元素根据需要使用。

我们在深入看看这个属性,它有些不同:

 


  1. public string ErrorId { 
  2.  
  3. get { return (string)this["Id"]; } 
  4.  
  5. set { this["Id"] = value; } 
  6.  

在这里value值存为键"id",和web.config里对应。

b.)现在需要要做的就是在section组注册、添加一个section告诉web.config你需要这种类型数据。

必须放在<configSections />里如下:

 


  1. <section name="errorList"  type="NewError" allowLocation="true" 
  2.  
  3.      allowDefinition="Everywhere"/> 

c.)现在可以直接在配置文件里添加这样的对象了:

 


  1. <errorList Id="1" Message="ErrorMessage" RedirectURL="www.google.com" MailId="xyz@hotmail.com"  
  2.  
  3.  
  4.  
  5. ></errorList> 

d.)然后在你的页面这样读取:

NewError objNewError = (NewError)ConfigurationManager.GetSection("errorList");

也可以通过程序方式保存一个新对象:

 


  1. NewError objNewError = new NewError() 
  2.  
  3.         { 
  4.  
  5.           RedirectionPage="www.rediff.com"
  6.  
  7.           Message = "New Message"
  8.  
  9.           ErrorId="0"
  10.  
  11.           DateAdded= DateTime.Now.Date 
  12.  
  13.         }; 
  14.  
  15.         Configuration config = 
  16.  
  17.             WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); 
  18.  
  19.  
  20.  
  21.         config.Sections.Add("errorList", objNewError); 
  22.  
  23.         config.Save(); 

甚至可以添加一个自定义的组,然后在此section区放置一些自定义元素。

Asp.net提供给我们非常强大的编程接口API,我们可以很轻松的读取/编辑web.config文件。

最后希望您心情愉悦的浏览此文,也非常感激您的回馈信息。

Thanks.




 本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/563076,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
从零开始学 Web 之 DOM(三)innerText与innerHTML、自定义属性
大家好,这里是「 Daotin的梦呓 」从零开始学 Web 系列教程。此文首发于「 Daotin的梦呓 」公众号,欢迎大家订阅关注。在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。
1006 0
【更正】“给自定义控件(Web Control)添加事件的几种方法”有一个不太准确的地方。
    给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler           上一篇写了一下如何在自定义控件里面添加事件,由简单的开始,一步一步实现了几种添加事件的方式,由于当时只给自定义控件添加了一种外部事件,测试的时候没有什么问题,但是后来在写分页控件的时候,我给分页控件加了两种外部事件,然后测试的时候就出现了一个问题,本来只想调用外部的一种事件,结果外部的两种事件都被调用了。
731 0
.net如何自定义config配置文件节点
本文转载:http://www.cnblogs.com/lori/archive/2013/04/03/2997617.html 对于小型项目来说,配置信息可以通过appSettings进行配置,而如果配置信息太多,appSettings显得有些乱,而且在开发人员调用时,也不够友好,节点名称很容易...
572 0
14350
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载