http://msdn.microsoft.com/en-us/library/system.configuration.configurationpropertyattribute.aspx
以下の QueueConfiguration クラスでは、QueueID は int を返します。コードを実行すると、getter にアクセスするときに次のエラーが発生します。プロパティ 'queueID' の値を解析できません。エラー: タイプ 'Int32' のプロパティ 'queueID' の文字列との間の変換をサポートするコンバーターが見つかりません。
文字列を返すように QueueID を変更すると、正常に動作します。上記のマイクロソフトのリンクでは、ポート プロパティを 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です(何らかの理由で、このサイトはアプリ構成の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>