System.Configuration.ConfigXmlElement中的无效强制转换异常

时间:2018-07-28 07:23:55

标签: c# .net hashtable config

我正在尝试使用以下代码访问“ web.config”文件的一部分

public static string XMLCheck
    {
        get
        {
            var section = (Hashtable)ConfigurationManager.GetSection("Default.Framework");
            return (string)section["ConnectionString"];
        }
    }

但是以Unable to cast object of type 'System.Configuration.ConfigXmlElement' to type 'System.Collections.Hashtable'的身份被执行,这是怎么了?如何改正 ?

更新

 <Resources>
      <Resource Uri="resource:Default:CrossDomain" Version="1.0" Id="8ae96c54" IsEnabled="True" Handler="handler:Default:Framework:Resources:Data:Oracle">
        <Properties>
          <Property Name="ConnectionString" Value="Data Source=TESTDB;User Id=TESTUSR;password=TESTPWD;Persist Security Info=false"/>
        </Properties>
      </Resource>
 </Resources>

1 个答案:

答案 0 :(得分:1)

验证您的web.config中的configSections项是DictionarySectionHandler

<configuration>
 <configSections>
  <section name="Default.Framework" type="System.Configuration.DictionarySectionHandler" />
 </configSections>
<configuration>

从更新后的代码中,您似乎正在使用为其config部分定义自定义XML结构的库或框架。通常,您将依靠此库通过其属性公开配置设置。如果您真的想解析XML,可以使用如下所示的XPath:

public static string XMLCheck
{
    get
    {
        var section = (XmlElement)ConfigurationManager.GetSection("Default.Framework");
        var connectionString = section.SelectSingleNode(@"
            descendant::Resource[@Uri='resource:Default:CrossDomain']
            /Properties
            /Property[@Name='ConnectionString']
            /@Value");
        return connectionString.Value;
    }
}