2008-10-06 80 views
3

我有一套配置項目,我需要堅持到「人類可讀」文件。這些項目是在一個層次:在.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。

回答

1

FileHelpers庫。它有噸的東西從讀取和寫入了很多不同的格式 - 所有你需要做的就是你的對象與屬性標記並調用保存()。有點像平面文件的ORM。

0

我一般用註冊表存儲配置(我知道,壞我!),但使用的System.Xml來讀/寫一個輕量級的XML文件並不難。事實上,我最近剛剛做了一個插件項目,該項目使用XML文檔與主機通信並存儲自己的持久設置。

還有System.Configuration命名空間,但我沒有真正處理它。

2

我認爲XmlSerializerNetDataContractSerializer都創建了人類可讀的XML。 I prefer NetDataContractSerializer,因爲它可以執行XmlSerializer不能執行的操作,但這些額外功能可能比您需要的更多。如果您已經爲您的配置編寫了課程,那麼其中一個可能是您獲得勝利的最短路徑。

您也可以將配置寫入本地app.config文件或使用自定義ConfigSectionsConfiguration class的子配置文件。

0

我在這種情況下的首選是創建一個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中,所有非註釋標記位於名爲表配置與字段密鑰 & 。非常容易搜索。

+0

能人實際上神交一個DataSet的XML序列化? – Benoit 2008-10-07 00:27:14

+0

當然,這取決於配置表結構的複雜性。我的配置加載到一個名爲Config的DataTable中,並帶有兩個字段(鍵,值)。我只是使用DataSet讀取它並訪問設置 - 我的應用程序將其加載到文本編輯器中進行編輯。 – 2008-10-07 00:37:18

2

如果您的序列結構到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

0

我會使用可序列化到XML的數據結構 - 事實上,因爲我懶,我會使用ADO.NET數據集,因爲它可以產生不具有簡單的序列化格式想想很難。

至於讓人類可讀的老話:如果它只是爲人類可讀的(而不是人爲修改的,我認爲這是你在這裏描述的),我想建立一個XSLT轉換和使用它在我寫出XML時生成HTML版本的配置數據。這可以讓你對數據的視覺呈現進行細化控制,就像你可能要求的那樣。

相關問題