继承ConfigurationElement以反序列化App.config文本元素

时间:2017-03-13 19:33:46

标签: c#

我想在项目的 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 如何存储信息。

感谢您的帮助。

0 个答案:

没有答案