Как я могу создать вложенное пользовательское приложение.config на C#

#c#

Вопрос:

Как я могу изменить приведенный ниже файл app.config, чтобы он имел вложенные параметры конфигурации :

 <configuration>
  <configSections>
    <section name="registerCompanies" type="My.MyConfigSection, My" />
  </configSections>
  <registerCompanies>
    <add name="Tata Motors" code="Tata"/>
    <add name="Honda Motors" code="Honda"/>
  </registerCompanies>
</configuration>
 

Пример вложенной конфигурации :

 <configuration>
  <configSections>
    <section name="registerCompanies" type="My.MyConfigSection, My" />
  </configSections>
  <registerCompanies>
    <company task = "1">
       <add name="Tata Motors" code="Tata"/>
    </company>
    <company task = "2">
       <add name="Honda Motors" code="Honda"/>
    <company>
    .
    .
    .
  </registerCompanies>
</configuration>
 

Ниже приведены мое пространство имен и класс, которые нуждаются в модификации для работы с вложенной конфигурацией:

 using System.Configuration;
using System.Linq;

namespace My
{
    public class MyConfigSection : ConfigurationSection
    {
        [ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]
        public MyConfigInstanceCollection Instances
        {
            get { return (MyConfigInstanceCollection)this[""]; }
            set { this[""] = value; }
        }
    }
    public class MyConfigInstanceCollection : ConfigurationElementCollection
    {
        protected override ConfigurationElement CreateNewElement()
        {
            return new MyConfigInstanceElement();
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            //set to whatever Element Property you want to use for a key
            return ((MyConfigInstanceElement)element).Name;
        }

        public new MyConfigInstanceElement this[string elementName]
        {
            get
            {
                return this.OfType<MyConfigInstanceElement>().FirstOrDefault(item => item.Name == elementName);
            }
        }
    }

    public class MyConfigInstanceElement : ConfigurationElement
    {
        //Make sure to set IsKey=true for property exposed as the GetElementKey above
        [ConfigurationProperty("name", IsKey = true, IsRequired = true)]
        public string Name
        {
            get { return (string)base["name"]; }
            set { base["name"] = value; }
        }

        [ConfigurationProperty("code", IsRequired = true)]
        public string Code
        {
            get { return (string)base["code"]; }
            set { base["code"] = value; }
        }
    }
}
 

В настоящее время он работает для обычного пользовательского приложения.config. Однако я хочу иметь вложенные конфигурации, как я показал в примере, где каждая компания классифицируется внутри задачи, а затем пользователи позже вручную добавляют дополнительные задачи, если хотят, без изменения кода. И я хочу пройтись по реестрам компаний, а затем по каждой отдельной задаче, а также обработать данные.

Комментарии:

1. Или просто перейдите в ConfigurationBuilder и используйте файлы json и типизированные конфигурации. App.Config-это старый сломанный способ работы с фреймворком