我想在项目的 App.config 文件中提供自定义配置部分。 ConfigurationSection 的默认实现在XML元素的属性部分中加载/存储值。我宁愿不将数据存储在属性部分中,而是存储在XML元素的文本字段中。通过继承 ConfigurationElement ,我可以更改此行为以在XML元素文本字段中加载/存储值。
文章Extend ConfigurationElement to Deserialize Text Elements为这项工作提供了很多指导。
public class RemoteSite : ConfigurationSection {
[ConfigurationProperty("Hi")]
public string Hi { get; set; }
[ConfigurationProperty("Me")]
public ConfigurationTextElement<string> Me {
get { return (ConfigurationTextElement<string>)this["Me"]; }
set { this["Me"] = value; } }
}
public class ConfigurationTextElement<T> : ConfigurationElement {
private T _value;
protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey) {
_value = (T)reader.ReadElementContentAs(typeof(T), null);
}
public T Value {
get { return _value; }
set { _value = value; } }
}
使用 RemoteSite 时,尝试从 ConfigurationTextElement 保存/获取数据时出现隐式转换错误>财产。
var site = new RemoteSite();
//Works as expected
site.Hi = "Hello";
string greeting = site.Hi;
//Gives the following error "Cannot implicitly convert type 'ConfigurationTextElement<string>' to 'string'.
site.Me = "I am";
string me = site.Me;
如何在代码的 RemoteSite 或 ConfigurationTextElement 一侧修复投射问题。我希望用户能够将数据作为字符串获取/设置,因为用户并不关心 RemoteSite 如何存储信息。
感谢您的帮助。