Как прочитать раздел web.config как XML в C #? - PullRequest
4 голосов
/ 16 марта 2012

Это скопированный пример из:

Как читать раздел пользовательских настроек в app.config в c #

Я хочу прочитать следующееПользовательский раздел из app.config:

<StartupFolders>    
   <Folders name="a">
      <add folderType="Inst" path="c:\foo" />
      <add folderType="Prof" path="C:\foo1" />      
   </Folders>
   <Folders name="b">
      <add folderType="Inst" path="c:\foo" />
      <add folderType="Prof" path="C:\foo1" />      
   </Folders> 
</StartupFolders>

И это тоже мой случай.Однако я не хочу создавать пользовательский класс для обработки значений, определять этот класс в web.config и, наконец, использовать его.Это тяжеловесно для моих нужд.

Вместо этого я хотел бы сделать что-то очень простое - извлечь раздел в формате XML.Тогда я мог бы использовать обычный Linq.Xml для его анализа.Таким образом, мне не нужно создавать новые классы для каждого раздела, мне не нужно объявлять их.Для моей цели этого достаточно, с одной стороны, и минимально с другой (я делаю это один раз, отображение значения ключа для вложенных разделов).То есть идеально.

Единственный недостающий фрагмент ( мой вопрос ) - как получить раздел web.config в формате XML?Примечание о разделе:

  • его нельзя кодировать, потому что его нужно редактировать вручную
  • , его нельзя сериализовать по той же причине

Поэтому я не ищу обходного пути, как сжать весь раздел как значение в appSettings, но я действительно ищу способ получить правильный раздел в виде XML.

Я хотел бы получить его из ConfigManager(!) , потому что таким образом мне не нужно решать, какой файл web.config мне следует читать и т. Д. Т.е. меньше шансов ошибиться, чем вручную имитировать приоритет web.config.


Простите за напоминание об этом, но, пожалуйста, избегайте «ответов», вы не должны этого делать, использовать пользовательский класс для каждого раздела и т. Д. Я уже рассмотрел это и решил отказаться от него.

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Я думаю, что вы должны сделать это вручную и загрузить веб-конфигурацию в память:

XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("~/Web.config")); 

Или вам нужно будет создать пользовательские разделы конфигурации, которых вы хотите избежать.

0 голосов
/ 16 марта 2012

Совершенно не проверено, но не могли бы вы использовать что-то подобное?:

ConfigurationSection exampleSection = 
    (ConfigurationSection)ConfigurationManager
                                        .GetSection("system.web/exampleSection");

Тогда, возможно, используйте exampleSection.ElementInformation для получения дополнительной информации?

...