2013-03-13 1 views
3

.Net ConfigurationManager를 사용하여 문자열을 저장할 수 있지만 어떻게 구조화 된 데이터를 저장할 수 있습니까?ConfigurationManager를 사용하여 구조화 된 데이터를 저장하는 방법은 무엇입니까?

conf = ConfigurationManager.OpenExeConfiguration(...) 
string s = "myval"; 
conf.AppSettings.Settings["mykey"].Value = s; 
conf.Save(ConfigurationSaveMode.Modified); 

을 그리고 난이 일을하고 싶습니다 :

예를 들어,이 작업을 수행 할 수 있습니다

class myclass { 
    public string s; 
    int i; 
    ... more elements 
}; 

myclass c = new myclass(); c.s = "mystring"; c.i = 1234; ... 

conf.AppSettings.Settings["mykey"] = cc; 
conf.Save(ConfigurationSaveMode.Modified); 

가 어떻게이 ConfigurationManager가 구조화 된 데이터를 저장하고 검색 할 수 있습니까?

@sll이 제안한대로 솔루션을 구현했습니다. 그러나 어려움은 구성에 대한 새로운 섹션을 만드는 것이 었습니다. 이것이 수행되는 방법은 다음과 같습니다. How to Write to a User.Config file through ConfigurationManager?

답변

2

ConfigurationSection 클래스를 상속 받아 고유 한 구성 섹션 유형을 만들고 사용자 정의 유형 정보를 저장 /로드 할 수 있습니다.

MSDN : How to: Create Custom Configuration Sections Using ConfigurationSection

BTW, 당신이나 다른 사람에게 도움이 될 수있는 한 가지 조언 : 한가지 좋은 점은 사용자 지정 구성 섹션 클래스 immutable (NO 공공 setter를)하고있다 그래서 당신은 구성에 변경 될 수 없음을 확신 할 수 있습니다 응용 프로그램 수명주기의 모든 단계지만, 구성 섹션 클래스에 의존하는 코드의 경우 단위 테스트 을 작성하기로 결정한 경우 몇 가지 테스트 값이있는 섹션 스텁이 필요합니다. 세터가 없으므로 속성 값을 설정하는 데 어려움이있을 수 있습니다. 해결책은 섹션 클래스에서 상속 받고 아래 표시된 것처럼 보호 된 인덱서를 사용하여 생성자 값을 지정하는 새 클래스를 제공합니다.

public class TestSectionClass: MyConfigurationSection 
{ 
    public TestSectionClass(string testUserName) 
    { 
     this["userName"] = testUserName; 
    } 
} 
+0

그게 내가 무엇을 찾고 있었는지. 생각, 어쩌면 구성 관리자 내장 직렬화의 일종을했다 ... – niteskate

+0

직렬화에 대해 잘 모르겠지만, 내가 사용자 지정 구성 섹션 접근 방식에서 기본 기능을 지정하는 강력한 입력 된 솔루션, 명확하고 인간이 읽을 수있는 구성 파일 – sll

1

Serialization.

데이터를 직렬화하는 다양한 방법이 있으므로 하나를 선택해야합니다. 그러나 .NET은 많은 경우에 적합한 직렬화 API를 제공하며 최근 웹 AJAX 호출을 사용하여 JavaScriptSerializer을 사용하여 JSON으로 변환합니다. 그러나 protobuf-net과 같은 타사 라이브러리가 있습니다.

중요한 것은 나중에 데이터를 바이트 또는 문자열 표현으로 변환하여 나중에 나중에 원래 형식으로 역 직렬화하여 나중에 구성 파일과 같은 중간에 저장할 수 있도록하는 것입니다 또는 네트워크를 통한 전송.

@ sll의 답변에 따르면 .NET에는 사용자 정의 구성 섹션 안팎으로 데이터의 직렬화를 처리 할 수 ​​있다는 또 다른 패싯이 있습니다. 이 목적을 위해 명시 적으로 유형을 지정하기 시작할지 여부는 사용자 호출입니다. 결론은 어떻게 든 직렬화됩니다.

+0

True! JavaScriptSerializer 클래스를 몰랐습니다. 필자는 JSON을 꽤 자주 사용하는 경향이 있습니다. 이제부터는 그런 유용한 수업을 사용하는 것이 매우 유혹적 일 것입니다. :-) – niteskate

관련 문제