富贵论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

广告位招租qq41463402
查看: 70|回复: 0

[教程] web.config中存储自定义对象的正确方法

[复制链接]

1万

主题

3

回帖

4万

积分

巡抚

UID
24639
金钱
0 点
威望
0 点
贡献
16878 点
宣传
0 人
买家
0 元
卖家
0 元
注册时间
2017-12-23
最后登录
2024-7-25

超强在线勋章拍卖狂勋章

发表于 2024-4-19 16:53 | 显示全部楼层 |阅读模式

怎样在web.config中存储自定义对象

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

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

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

下,这样做很有用。

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

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

//数据存放在web.config中形如: // 读取 string message=ConfigurationManager.AppSettings["WelcomeMessage"];

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

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

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

//增加 Configuration config=WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); config.AppSettings.Settings.Add("ErrorMessage", "An error has been occured during processing this request."); config.Save();

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

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

当然可以...

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

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

当需要时对其进行修改。

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

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

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

们看下NewError类:

public class NewError:ConfigurationSection { //译注:每一个属性(Porperty:get,set的那玩意;-))都对应有个属性Attribute【[ConfigurationProperty 】 [ConfigurationProperty ("Id",IsRequired=true)] public string ErrorId { get { return (string)this["Id"]; } set { this["Id"]=value; } } [ConfigurationProperty("Message", IsRequired=false)] public string Message { get { return (string)this["Message"]; } set { this["Message"]=value; } } [ConfigurationProperty("RedirectURL", IsRequired=false)] public string RedirectionPage { get { return (string)this["RedirectURL"]; } set { this["RedirectURL"]=value; } } [ConfigurationProperty("MailId", IsRequired=false)] public string EmailId { get { return (string)this["MailId"]; } set { this["MailId"]=value; } } [ConfigurationProperty("DateAdded", IsRequired=false)] public DateTime DateAdded { get { return (DateTime)this["DateAdded"]; } set { this["DateAdded"]=value; } } }

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

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

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

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

public string ErrorId { get { return (string)this["Id"]; } set { this["Id"]=value; } }

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

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

必须放在里如下:

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

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

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

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

NewError objNewError=new NewError() { RedirectionPage="www.rediff.com", Message="New Message", ErrorId="0", DateAdded=DateTime.Now.Date }; Configuration config=WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath); config.Sections.Add("errorList", objNewError); config.Save();

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

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

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|富贵论坛 ( 琼ICP备2022019866号-1 )

GMT+8, 2024-7-27 09:46 , Processed in 0.107841 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表