http://msdn.microsoft.com/en-us/library/system.configuration.configurationpropertyattribute.aspx
Immutable types as configuration properties
在QueueID下面的QueueConfiguration类中,返回一个int。当我运行代码时,我在访问getter时遇到此错误: 无法解析属性“queueID”的值。错误是:无法找到支持转换为/从字符串转换为'Int32'类型的属性'queueID'的转换器。
如果我更改QueueID以返回一个字符串,它可以正常工作。请注意,在上面引用的microsoft链接中,不需要使用typeconverter将port属性作为int返回。我想我错过了一些明显的东西......
public class QueueConfiguration : ConfigurationSection
{
[ConfigurationProperty("queueID", DefaultValue = (int)0, IsKey = true, IsRequired = true)]
public int QueueID
{
get
{
return (int)this["queueID"];
}
set { this["queueID"] = value; }
}
[ConfigurationProperty("queueName", DefaultValue = "", IsKey = false, IsRequired = true)]
public string QueueName
{
get { return (string)this["queueName"]; }
set { this["queueName"] = value; }
}
}
public class QueueConfigurationCollection : ConfigurationElementCollection
{
internal const string PropertyName = "QueueConfiguration";
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.BasicMapAlternate;
}
}
protected override string ElementName
{
get
{
return PropertyName;
}
}
protected override bool IsElementName(string elementName)
{
return elementName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase);
}
public override bool IsReadOnly()
{
return false;
}
protected override ConfigurationElement CreateNewElement()
{
return new QueueConfiguration();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((QueueConfiguration)(element)).QueueID;
}
public QueueConfiguration this[int idx]
{
get
{
return (QueueConfiguration)BaseGet(idx);
}
}
}
public class QueueConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("Queues")]
public QueueConfigurationCollection Queues
{
get { return ((QueueConfigurationCollection)(this["Queues"])); }
set { this["Queues"] = value; }
}
}
这是我的App.config(由于某种原因,该网站拒绝显示app config的configSection部分,所以我会尽力打破它:
<configSections>
<section name="QueueConfigurations" type="STPMonitor.Common.QueueConfigurationSection, STPMonitor"/>
</configSections>
<QueueConfigurations>
<Queues>
<QueueConfiguration queueID="1" queueName="One"></QueueConfiguration>
<QueueConfiguration queueID="2" queueName="Two"></QueueConfiguration>
</Queues>
</QueueConfigurations>
答案 0 :(得分:1)
好吧,我只是复制粘贴并尝试了你的代码,它没有任何错误。我的阅读代码是:
var section = ConfigurationManager.GetSection("QueueConfigurations") as QueueConfigurationSection;
var queueId = section.Queues[0].QueueID;
Console.Out.WriteLine("queueId = {0}", queueId);
并打印queueId = 1