Волшебство здесь заключается в использовании классов ConfigurationSection.
Эти классы просто должны содержать свойства, соответствующие 1: 1 вашей схеме конфигурации. Вы используете атрибуты, чтобы сообщить .NET, какие свойства соответствуют каким элементам.
Таким образом, вы можете создать PaymentMethod и сделать его наследником ConfigurationSection
И вы бы создали SubPaymentMethod и унаследовали бы его от элемента конфигурации.
PaymentMethod будет содержать ConfigurationElementCollection SubPaymentMethods в качестве свойства, то есть, как вы соединяете сложные типы вместе.
Вам не нужно писать собственный код для разбора XML.
public class PaymentSection : ConfigurationSection
{
// Simple One
[ConfigurationProperty("name")]]
public String name
{
get { return this["name"]; }
set { this["name"] = value; }
}
}
и т.д ...
Смотрите здесь, как создать ConfigurationElementCollections, чтобы вы могли иметь вложенные типы:
http://blogs.neudesic.com/blogs/jason_jung/archive/2006/08/08/208.aspx