Как сохранить целое число в файле конфигурации, но получить его как перечисление? - PullRequest
0 голосов
/ 19 мая 2010

У меня есть класс, который представляет элемент конфигурации:

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 в атрибут уровня (одно из значений этого перечисления), то он будет работать идеально.

Есть мысли, как это решить?

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Вы можете взломать вокруг него, изменив свойство конфигурации на тип int, сделав его приватным и создав новое свойство в своем классе.

[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; }
}

Приведенный выше код приведен в качестве простого примера без какой-либо проверки ошибок.

0 голосов
/ 19 мая 2010

Я нашел решение.

Вы можете переопределить метод DeserializeElement

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