programing

사전 개체를 web.config 파일에 저장하려면 어떻게 해야 합니까?

mailnote 2023. 7. 10. 22:37
반응형

사전 개체를 web.config 파일에 저장하려면 어떻게 해야 합니까?

웹 구성 파일에 간단한 키/값 문자열 사전을 저장하고 싶습니다.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>

왜 바퀴를 재창조해야 합니까?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"];
}

줄리엣의 대답은 정확하지만 참고로 외부 구성을 추가할 수도 있습니다..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"

사용자 정의 섹션을 구현해야 합니다(구성 섹션 디자이너 참조).

당신이 정말 원하는 건...다음과 유사합니다.

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

여기서 XmlAttribute "name"은 코드 뒤에 둘 이상을 둘 수 없는 Key입니다.동시에 컬렉션 내 사전도 사전인지 확인합니다.

이 모든 작업을 이 도구로 수행하고 필요에 따라 공백을 메울 수 있습니다.

응용 프로그램 설정에서 시스템을 사용할 수 있습니다.수집.특수화된.문자열 컬렉션

<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]

사전을 직접 저장하는 방법은 잘 모르겠지만 문자열 배열을 사용하여 사전을 쉽게 저장할 수 있습니다.모든 키, 값 쌍에 대해 키를 첫 번째 문자열로 저장하고 값을 두 번째 문자열로 저장합니다.그런 다음 사전을 재구성할 때 이 인코딩을 실행 취소할 수 있습니다.

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;
}

언급URL : https://stackoverflow.com/questions/338242/how-do-i-store-a-dictionary-object-in-my-web-config-file

반응형