如何在配置文件中存储整数但将其作为枚举检索?

时间:2010-05-19 13:44:53

标签: c# configuration web-config

我有一个代表配置元素的类:

public class ProductLevelConfigurationElement 
    : ConfigurationElement, IProductLevelConfiguration
{
    [ConfigurationProperty("level",IsKey = true, IsRequired = true)]
    public ProductLevel Level
    {
        get { return (ProductLevel)this["level"]; }
        set { this["level"] = value; }
    }
    [ConfigurationProperty("include")]
    public bool Include
    {
        get { return (bool)this["include"]; }
        set { this["include"] = value; }
    }
}

在web.config中我想配置它:

<item level="1" include="true" />

但它不起作用。如果我将MainProduct放在level属性(此枚举的值之一)中,那么它将完美无缺。

关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:2)

您可以通过将配置属性更改为int类型来隐藏 hack ,将其设为私有并在您的类上创建新属性。

[ConfigurationProperty("level", IsKey = true, IsRequired = true)]
private int LevelFromConfig
{
    get { return (int)this["level"]; }
    set { this["level"] = value; }
}

public ProductLevel Level
{
    get { return (ProductLevel)this.LevelFromConfig; }
}

上面的代码是一个简单的例子,没有任何错误检查。

答案 1 :(得分:0)

我找到了解决方案。

您可以覆盖DeserializeElement方法

protected override void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey)
{
 Level = (ProductLevel) int.Parse(reader.GetAttribute("level"));
}