67

Web 構成ファイルに単純なキー/値文字列辞書を保存したいと考えています。Visual Studio では文字列コレクションを簡単に格納できます (以下のサンプルを参照) が、辞書コレクションでそれを行う方法がわかりません。

        <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
          <string>value1</string>
          <string>value2</string>
          <string>value2</string>
        </ArrayOfString>
4

5 に答える 5

127

なぜ車輪を再発明するのですか?AppSettingsセクションは、まさに辞書のようなデータを構成ファイルに保存する目的で設計されています

AppSettings セクションにあまり多くのデータを入れたくない場合は、次のように、関連する値を独自のセクションにグループ化できます。

<configuration>
  <configSections>
    <section 
      name="MyDictionary" 
      type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <MyDictionary>
     <add key="name1" value="value1" />
     <add key="name2" value="value2" />
     <add key="name3" value="value3" />
     <add key="name4" value="value4" />
  </MyDictionary>
</configuration>

を使用して、このコレクション内の要素にアクセスできます。

using System.Collections.Specialized;
using System.Configuration;

public string GetName1()
{
    NameValueCollection section =
        (NameValueCollection)ConfigurationManager.GetSection("MyDictionary");
    return section["name1"];
}
于 2008-12-03T18:49:25.373 に答える
27

ジュリエットの答えは的を射ていますが、参考までに、次のよう.configに設定することで、外部ファイルに追加の構成を配置することもできます。web.config

<?xml version="1.0"?>
<configuration>
  <configSections>
    <!-- blah blah the default stuff here -->

    <!-- here, add your custom section -->
    <section name="DocTabMap" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <!-- your custom section, but referenced in another file -->
  <DocTabMap file="CustomDocTabs.config" />

  <!-- etc, remainder of default web.config is here -->
</configuration>

次に、CustomDocTabs.config次のようになります。

<?xml version="1.0"?>
<DocTabMap>
  <add key="A" value="1" />
  <add key="B" value="2" />
  <add key="C" value="3" />
  <add key="D" value="4" />
</DocTabMap>

これで、次のコードでアクセスできます。

NameValueCollection DocTabMap = ConfigurationManager.GetSection("DocTabMap") as NameValueCollection;
DocTabMap["A"] // == "B"
于 2010-07-20T20:20:56.673 に答える
5

カスタム セクションを実装する必要があります (構成セクション デザイナーを参照)。

あなたが本当に欲しいのは...これに近いものです:

<MyDictionary>
  <add name="Something1" value="something else"/>
  <add name="Something2" value="something else"/>
  <add name="Something3" value="something else"/>
</MyDictionary>

XmlAttribute の「名前」は、コード ビハインドに複数存在することを許可しない Key です。同時に、Collection MyDictionary も Dictionary であることを確認してください。

このすべてをこのツールで実行し、必要に応じてギャップを埋めることができます。

于 2008-12-03T18:36:25.867 に答える
3

アプリケーション設定では、 System.Collection.Specilized.StringCollection を使用できます

<X.Properties.Settings>
  <setting name="ElementsList" serializeAs="Xml">
    <value>
      <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <string>Element1</string>
        <string>Element2</string>
      </ArrayOfString>
    </value>
  </setting>
</X.Properties.Settings>

リストへのアクセス:

var element = Settings.Default.ElementsList[index]
于 2011-07-29T10:38:19.897 に答える
0

Dictionary を直接保存する方法はわかりませんが、文字列の配列を使用して辞書を簡単に保存できます。すべてのキーと値のペアについて、キーを最初の文字列として保存し、値を 2 番目の文字列として保存します。次に、辞書を再構築するときに、このエンコーディングを元に戻すことができます。

static Dictionary<string,string> ArrayToDictionary(string[] data) {
  var map = new Dictionary<string,string>();
  for ( var i=  0; i < data.Length; i+=2 ) {
    map.Add(data[i], data[i+1]);
  }
  return map;
}
于 2008-12-03T18:38:18.920 に答える