在.net中保留配置项目
我有一套配置项目,我需要坚持到“人类可读”文件。这些项目是在一个层次:在.net中保留配置项目
Device 1 Name Channel 1 Name Size ... Channel N Name ... Device M Name Channel 1
每个项目可以存储在一个字典用字符串键和值。他们也可以在结构/ DTO中。
只要它是人类可读的,我不关心文件的格式。这可能是XML,也可能有更多的东西一样INI格式
[Header] Key=value Key2=value ...
有没有一种方法,以尽量减少锅炉板代码,我需要写来管理存储/读取配置项的金额是多少?
我应该创建数据传输对象(DTO)/结构并将其标记序列化(不会产生臃肿的XML还是人类可读?)
有没有其他的建议?
编辑:不是说软件必须写以及读配置。这留下了app.config。
我怀疑你会希望使用是包含在.NET将能够在使用System.Configuration namesapce加载XML格式的设置的app.config文件。
此处了解详情:http://geekswithblogs.net/akraus1/articles/64871.aspx
我一般用注册表存储配置(我知道,坏我!),但使用的System.Xml来读/写一个轻量级的XML文件并不难。事实上,我最近刚刚做了一个插件项目,该项目使用XML文档与主机通信并存储自己的持久设置。
还有System.Configuration命名空间,但我没有真正处理它。
我认为XmlSerializer和NetDataContractSerializer都创建了人类可读的XML。 I prefer NetDataContractSerializer,因为它可以执行XmlSerializer不能执行的操作,但这些额外功能可能比您需要的更多。如果您已经为您的配置编写了课程,那么其中一个可能是您获得胜利的最短路径。
您也可以将配置写入本地app.config文件或使用自定义ConfigSections和Configuration class的子配置文件。
我在这种情况下的首选是创建一个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中,所有非注释标记位于名为表配置与字段密钥 & 值。非常容易搜索。
如果您的序列结构到JSON你会得到你的对象的简单的表示比XML。
下面是从詹姆斯Netwon国王的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 here。
我会使用可序列化到XML的数据结构 - 事实上,因为我懒,我会使用ADO.NET数据集,因为它可以产生不具有简单的序列化格式想想很难。
至于让人类可读的老话:如果它只是为人类可读的(而不是人为修改的,我认为这是你在这里描述的),我想建立一个XSLT转换和使用它在我写出XML时生成HTML版本的配置数据。这可以让你对数据的视觉呈现进行细化控制,就像你可能要求的那样。
能人实际上神交一个DataSet的XML序列化? – Benoit 2008-10-07 00:27:14
当然,这取决于配置表结构的复杂性。我的配置加载到一个名为Config的DataTable中,并带有两个字段(键,值)。我只是使用DataSet读取它并访问设置 - 我的应用程序将其加载到文本编辑器中进行编辑。 – 2008-10-07 00:37:18