假設有這麼一個簡單的ConfigurationSection類型(只有一個Id屬性):
class MySection : ConfigurationSection
{
[ConfigurationProperty("id")]
public int Id
{
get { return (int)this["id"]; }
set { this["id"] = value; }
}
}
那麼你的設定檔只能這樣寫:
<configuration>
<configSections>
<section name="mysec1" type="Mgen.MySection, Mgen"/>
</configSections>
<mysec1 id="-17" />
</configuration>
程式通過ConfigurationManager讀取相應ConfigurationSection,然後輸出結果:
//+ using System.Configuration;
var myset = ConfigurationManager.GetSection("mysec1") as MySection;
Console.WriteLine(myset.Id);
但是如果你把設定檔的mysec1元素改成這樣的形式,把屬性調整成元素:
<mysec1>
<id>-17</id>
</mysec1>
很悲劇,結果肯定是無法識別:
Unhandled Exception: System.Configuration.ConfigurationErrorsException: Property
'id' is not a ConfigurationElement
解決方案就是改寫ConfigurationElement.DeserializeElement方法,然後我們手動用XmlReader讀取Id屬性。(注意ConfigurationSection繼承與ConfigurationElement類)
代碼:
class MySection : ConfigurationSection
{
[ConfigurationProperty("id")]
public int Id
{
get { return (int)this["id"]; }
set { this["id"] = value; }
}
protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey)
{
reader.ReadStartElement();
Id = Convert.ToInt32(reader.ReadElementString("id"));
}
}