Jan 28, 2009

ConfigSectionHandler for Hierarchical configs

Here is a quick way to create a ConfigSection Handler for reading Hierarchical configs. For e.g. suppose you need to read a config file which has the following structure:



For this you would create the 2 classes, one for the Parent Config and another for the chold config like this:

public class MainConfig
private static readonly MainConfig instance =
public static MainConfig GetInstance()
if (instance == null)
throw new ConfigurationErrorsException(
"Unable to locate or deserialize the 'MainConfig' section.");

return instance;

public string Company { get; set; }

public SubConfig FriendsConfig { get; set; }

public class SubConfig
public int ID { get; set; }
public string Name { get; set; }
public string LastName { get; set; }

Then you would create a configsectionHandler class which reads the config from the .config file:

public class MainConfigSectionHandler : IConfigurationSectionHandler
#region IConfigurationSectionHandler Members

public object Create(object parent, object configContext, System.Xml.XmlNode section)
MainConfig typedConfig = GetConfig(section);

if (typedConfig != null)
#region Get Sub Configs
foreach (XmlNode node in section.ChildNodes)
switch (node.Name)
case "SubConfig":
SubConfig friendsConfig = GetConfig(node);
typedConfig.FriendsConfig = friendsConfig;

return typedConfig;

public T GetConfig(System.Xml.XmlNode section) where T : class
T sourcedObject = default(T);
Type t = typeof(T);
XmlSerializer ser = new XmlSerializer(typeof(T));
sourcedObject = ser.Deserialize(new XmlNodeReader(section)) as T;
return sourcedObject;



After this you would add a entry in the app.config for this configsection Handler as the following:

Finally to read this config, you would write the following:

MainConfig config = MainConfig.GetInstance(); Console.WriteLine(config.Company);

kick it on DotNetKicks.com

No comments: