3

「人間が読める」ファイルに永続化する必要がある一連の構成項目があります。これらの項目は階層になっています。

デバイス 1
   名前
   チャンネル 1
     名前
     サイズ
     ...
   チャンネル N
     名前
...
デバイス M
   名前
   チャンネル 1

これらの各項目は、文字列 Key と値を持つ Dictionary に格納できます。それらは、構造体/DTO にある場合もあります。

人間が読める形式であれば、ファイルの形式は気にしません。XML の場合もあれば、INI 形式に似た形式の場合もあります。

[ヘッダ]
  キー=値
  Key2=値
...

構成アイテムの保存/読み取りを管理するために記述する必要がある定型コードの量を最小限に抑える方法はありますか?

データ転送オブジェクト (DTO)/構造を作成し、それらをシリアル化可能とマークする必要があります (それでも人間が読み取れる肥大化した XML を生成しますか?)

他の提案はありますか?

編集:ソフトウェアが構成を読み取るだけでなく、書き込む必要があるわけではありません。それは app.config を除外します。

4

8 に答える 8

3

.NET の YAML

于 2008-10-06T23:44:52.757 に答える
2

XmlSerializerNetDataContractSerializerの両方が、人間が判読できる XML を作成すると思います。 XmlSerializer ではできないことを実行できるので、私は NetDataContractSerializerを好みますが、これらの追加機能はおそらく必要以上のものです。構成用に作成されたクラスが既にある場合は、おそらくこれら 2 つのうちの 1 つが勝利への最短の道です。

カスタムConfigSectionsConfiguration クラスを使用して、構成をローカルの app.config ファイルまたはサブ構成ファイルに書き込むこともできます。

于 2008-10-06T23:51:39.747 に答える
2

構造を JSON にシリアル化すると、オブジェクトの表現が XML よりも単純になります。

James Netwon-King の 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 をダウンロードしたりできます。

于 2008-10-07T00:52:43.493 に答える
1

使用したいのは、.NET が System.Configuration 名前空間を使用して読み込むことができる XML 形式の設定を含む app.config ファイルだと思います。

詳細はこちら: http://geekswithblogs.net/akraus1/articles/64871.aspx

于 2008-10-06T23:45:30.757 に答える
1

FileHelpersライブラリを参照してください。さまざまな形式から読み書きするためのものがたくさんあります - そして、あなたがしなければならないことは、オブジェクトを属性でマークアップし、Save() を呼び出すことだけです。フラットファイルのORMのようなものです。

于 2008-10-07T00:55:34.437 に答える
0

XML にシリアル化できるデータ構造を使用します。実際、私は怠け者なので、ADO.NET DataSet を使用します。これは、それほど難しく考えなくても作成できる単純なシリアル化形式を備えているためです。 .

人間が読めるようにする限り:人間が読める必要がある場合(ここで説明しているのは人間が変更できないと思います)、XSLT変換を構築し、それを使用して生成しますXML を書き出すたびに、HTML バージョンの構成データが生成されます。これにより、データの視覚的な表現を必要に応じてきめ細かく制御できます。

于 2008-10-07T01:21:53.543 に答える
0

私は通常、構成を保存するためにレジストリを使用してきました (私は悪いことです!) が、System.Xml を使用して軽量の XML ファイルを読み書きするのは難しくありません。実際、私は最近、XML ドキュメントを使用してホストと通信し、独自の永続的な設定を保存するプラグイン プロジェクトで、まさにそれを行いました。

System.Configuration 名前空間もありますが、実際には扱っていません。

于 2008-10-06T23:49:52.870 に答える
0

この状況での私の好みは、適切なリレーショナルな方法で配置された構成データの DataTables を使用して DataSet を作成し、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 にロードすると、コメント以外のタグはすべて、フィールドKey & valueを持つConfigという名前のテーブルに存在します。非常に簡単に検索できます。

于 2008-10-07T00:16:43.550 に答える