0

我在读取 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:一旦我听到这个,我还想添加更多配置部分。

4

1 回答 1

0

如果没有对您的代码进行一些详细检查,看起来您的部分类型没有正确定义,应该像type="Interest.InterestRates_A_Configuration"

顺便说一句,你最好阅读这篇深入的文章,涵盖你现在需要的关于 .net 配置的所有内容。

揭开 .NET 2.0 配置的奥秘

于 2016-11-29T14:07:21.600 回答