Сохранение элементов конфигурации в .net - PullRequest
3 голосов
/ 07 октября 2008

У меня есть набор элементов конфигурации, которые необходимо сохранить в «читабельном» файле. Эти элементы находятся в иерархии:

Device 1
   Name
   Channel 1
     Name
     Size
     ...
   Channel N
     Name
...
Device M
   Name
   Channel 1

Каждый из этих элементов может быть сохранен в словаре со строкой Key и значением. Они также могут быть в структуре / DTO.

Мне не важен формат файла, если он читается человеком. Это может быть XML или что-то более похожее на формат INI

[Header]
  Key=value
  Key2=value
...

Есть ли способ минимизировать количество кода плиты котла, которое мне нужно было бы написать для управления хранением / чтением элементов конфигурации?

Должен ли я просто создавать объекты / структуры передачи данных (DTO) и помечать их как сериализуемые (генерирует ли раздутый XML все еще удобочитаемый для человека?)

Есть ли другие предложения?

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

Ответы [ 8 ]

3 голосов
/ 07 октября 2008
2 голосов
/ 07 октября 2008

Если вы сериализуете свою структуру в JSON, вы получите более простое представление вашего объекта, чем в XML.

Вот пример с сайта JSON.Net Джеймса Нетвон-Кинга:

Product product = new Product();    
product.Name = "Apple";    
product.Expiry = new DateTime(2008, 12, 28);    
product.Price = 3.99M;    
product.Sizes = new string[] { "Small", "Medium", "Large" };    

string json = JavaScriptConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": new Date(1230422400000),
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}   

Product deserializedProduct = JavaScriptConvert.DeserializeObject<Product>(json);

Вы можете прочитать его блог и скачать JSON.Net здесь .

2 голосов
/ 07 октября 2008

Я думаю, что и XmlSerializer и NetDataContractSerializer создают удобочитаемый XML-код. Я предпочитаю NetDataContractSerializer, потому что он может делать то, что не может XmlSerializer, но эти дополнительные функции, вероятно, больше, чем вам нужно для этого. Если у вас уже есть классы, написанные для ваших конфигураций, один из этих двух, вероятно, ваш кратчайший путь к победе.

Вы также можете записать свои конфигурации в локальный файл app.config или файл подконфигурации, используя пользовательские ConfigSections и класс конфигурации .

1 голос
/ 07 октября 2008

См. Библиотеку FileHelpers . У него есть тонны материала для чтения и записи во множество различных форматов - и все, что вам нужно сделать, это пометить ваши объекты атрибутами и вызвать Save (). Вроде как ORM для плоских файлов.

1 голос
/ 07 октября 2008

Я подозреваю, что вы захотите использовать файл app.config, который содержит ваши настройки в формате XML, который .NET сможет загрузить с помощью имен имен System.Configuration.

Больше информации здесь: http://geekswithblogs.net/akraus1/articles/64871.aspx

0 голосов
/ 07 октября 2008

Я бы использовал структуру данных, которую можно сериализовать в XML - фактически, поскольку я ленив, я бы использовал ADO.NET DataSet, поскольку он имеет простой формат сериализации, который вы можете создавать без необходимости мыслить ужасно трудно.

Что касается того, чтобы сделать его читаемым человеком, то это звучит так: если он просто должен быть читаемым человеком (а не модифицируемым человеком, что, как мне кажется, вы здесь описываете), я бы создал XSLT-преобразование и использование это для создания HTML-версии данных конфигурации всякий раз, когда я записывал XML. Это дает вам как можно более детальный контроль над визуальным представлением данных, как вы могли бы попросить.

0 голосов
/ 07 октября 2008

В этой ситуации я предпочитаю создать DataSet с DataTables для данных конфигурации, упорядоченных хорошим реляционным способом, а затем использовать DataSet.WriteXML (), чтобы сохранить его в файле конфигурации.

Затем, чтобы загрузить его снова, вы просто используете DataSet.ReadXML (), и он возвращается в симпатичный объект с возможностью запроса.

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

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--****************************************************************
 Config File: FileToExcel_test.cfg
      Author: Ron Savage
        Date: 06/20/2008

 Description: 
 File to test parsing a file into an Excel workbook.

 Modification History: 
 Date       Init Comment
 06/20/2008 RS   Created.
******************************************************************-->

<!--********************************************************************
 Global Key Definitions
********************************************************************-->
   <config key="sqlTimeout"      value="1800"/>
   <config key="emailSMTPServer" value="smtp-server.austin.rr.com"/>
   <config key="LogFile"         value="FiletoExcel_test_{yyyy}{mm}{hh}.log"/>
   <config key="MaxEntries"      value="1"/>

<!--********************************************************************
 Delimiter Configurations
********************************************************************-->
   <config key="pipe"           value="|"/>


<!--********************************************************************
 Source / Target Entries
********************************************************************-->
   <config key="source_1"  value="FILE, c:\inetpub\ftproot\filetoexcel.txt, pipe, , , , , "/>
   <config key="target_1"  value="XLS, REPLACE, c:\inetpub\ftproot\filetoexcel1.xls, , , , , , , ,c:\inetpub\ftproot\filetoexcel_template.xls, ,3"/>
   <config key="notify_1"  value="store_error, store_success"/>
</configuration>

Когда я загружаю его в DataSet, все теги без комментариев находятся в таблице с именем Config с полями Ключ & значение . Очень легко искать.

0 голосов
/ 07 октября 2008

Обычно я использовал реестр для хранения конфигураций (я знаю, что плохо!), Но использовать System.Xml для чтения / записи облегченного XML-файла не сложно. Фактически, я недавно сделал это для проекта плагина, который использует XML-документы для связи с его хостом, а также для хранения его собственных постоянных настроек.

Существует также пространство имен System.Configuration, но я на самом деле не имел с ним дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...