Чтение из пользовательской конфигурации в App.config

У меня проблемы с чтением из App.config.

Это мой App.config:

    <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
    <configSections>
      <section name="InterestRates_A" type="InterestRates_A_Configuration" />
    </configSections>
      <InterestRates_A>
        <InterestRate_A band="0" validFrom="" validTo="2004-12-31" rate="0.00000"/>
        <InterestRate_A band="1" validFrom="2005-01-01" validTo="2005-12-31" rate="0.04247"/>
        <InterestRate_A band="2" validFrom="2006-01-01" validTo="2006-12-31" rate="0.02986"/>
        <InterestRate_A band="3" validFrom="2007-01-01" validTo="2009-10-30" rate="0.02740"/>
        <InterestRate_A band="4" validFrom="2009-10-31" validTo="" rate="0.02470"/>
      </InterestRates_A>  
</configuration>

Это мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace Interest
{
  public class InterestRate_A : ConfigurationElement
  {
    [ConfigurationProperty("band", IsRequired = true)]
    public string Band
    {
      get
      {
        return this["band"] as string;
      }
    }

    [ConfigurationProperty("validFrom", IsRequired = true)]
    public string ValidFrom
    {
      get
      {
        return this["ValidFrom"] as string;
      }
    }

    [ConfigurationProperty("validTo", IsRequired = true)]
    public string ValidTo
    {
      get
      {
        return this["validTo"] as string;
      }
    }

    [ConfigurationProperty("rate", IsRequired = true)]
    public string Rate
    {
      get
      {
        return this["rate"] as string;
      }
    }
  }

  public class InterestRates_A : ConfigurationElementCollection
  {
    public InterestRate_A this[int index]
    {
      get
      {
        return base.BaseGet(index) as InterestRate_A;
      }
      set
      {
        if (base.BaseGet(index) != null)
        {
          base.BaseRemoveAt(index);
        }
        this.BaseAdd(index, value);
      }
    }

    public new InterestRate_A this[string responseString]
    {
      get { return (InterestRate_A)BaseGet(responseString); }
      set
      {
        if (BaseGet(responseString) != null)
        {
          BaseRemoveAt(BaseIndexOf(BaseGet(responseString)));
        }
        BaseAdd(value);
      }
    }

    protected override System.Configuration.ConfigurationElement CreateNewElement()
    {
      return new InterestRate_A();
    }

    protected override object GetElementKey(System.Configuration.ConfigurationElement element)
    {
      return ((InterestRate_A)element).Band;
    }
  }

  public class InterestRates_A_Configuration : ConfigurationSection
  {
    public static InterestRates_A_Configuration GetConfig()
    {
      return (InterestRates_A_Configuration)System.Configuration.ConfigurationManager.GetSection("InterestRates_A") ?? new InterestRates_A_Configuration();
    }

    [System.Configuration.ConfigurationProperty("InterestRates_A")]
    [ConfigurationCollection(typeof(InterestRates_A), AddItemName = "InterestRate_A")]
    public InterestRates_A InterestRates_A
    {
      get
      {
        object o = this["InterestRates_A"];
        return o as InterestRates_A;
      }
    }
  }
}

Вот как я это называю:

  foreach (var item in config.InterestRates_A)
  {

  }

Проблема в том, что он вообще не находит раздел. Что мне здесь не хватает? Заранее спасибо всем, что потребуется время, чтобы выручить меня!

PS: Как только я заверну это, я также хотел бы добавить больше разделов конфигурации.

1 ответ

Без некоторой детальной проверки вашего кода, похоже, что ваш тип раздела не определен должным образом, type="Interest.InterestRates_A_Configuration"

Кстати, было бы лучше, если бы вы прочитали эту углубленную статью, охватывающую все, что вам нужно сейчас о конфигурации.net.

Раскрытие тайн конфигурации.NET 2.0

Другие вопросы по тегам