2008-09-09 8 views
0

.Net 2와 내 설정을 저장하는 일반적인 방법을 사용하고 있습니다. XML에 직렬화 된 내 사용자 정의 객체를 저장합니다. 다른 속성을 다시 설정하지 않고 속성의 기본값을 검색하려고합니다. 내가 사용Properties.Settings.Default를 사용하여 속성 기본값 사용

ValuationInput valuationInput = (ValuationInput) Settings.Default.Properties["ValuationInput"].DefaultValue; 

그러나 대신 ValuationInput의 문자열을 반환하는 것 그것이 예외가 발생합니다.

나는 잘 작동 빠른 해킹, 제작 :

string valuationInputStr = (string) 
Settings.Default.Properties["ValuationInput"].DefaultValue; 
XmlSerializer xmlSerializer = new XmlSerializer(typeof(ValuationInput)); 
ValuationInput valuationInput = (ValuationInput) xmlSerializer.Deserialize(new StringReader(valuationInputStr)); 

을하지만 정말 못생긴 - 나는 강력한 형식의 설정을 정의 할 수있는 모든 도구를 사용할 때, 나는 기본 값을 직렬화하고 싶지 않아 나는 현재 값을 읽는 것과 같은 방법으로 그것을 읽고 싶다 : ValuationInput valuationInput = Settings.Default.ValuationInput;

답변

2

어떤 점에서, 당신이나 설정 클래스 내부의 래퍼이던간에, 어딘가에 Xml Deserialization을 사용해야 할 것이다. . 비즈니스 논리에서 "추악한"코드를 제거하는 방법으로 언제든지 추상화 할 수 있습니다.

public static T FromXml<T>(string xml) 
{ 
    XmlSerializer xmlser = new XmlSerializer(typeof(T)); 
    using (System.IO.StringReader sr = new System.IO.StringReader(xml)) 
    { 
     return (T)xmlser.Deserialize(sr); 
    } 
} 

http://www.vonsharp.net/PutDownTheXmlNodeAndStepAwayFromTheStringBuilder.aspx

2

@Grzenio,

왜 당신은 당신의 객체가 직접 입력 사용하지 않는? 프로젝트 속성 -> 설정 탭에서 설정 유형을 설정할 수 있습니다. 유형 열의 드롭 다운에서 찾아보기를 클릭하여 유형을 선택할 수 있습니다. MSDN에서

인용 :

응용 프로그램 설정 로

당신이 가질 수있는 방법을 FromString/직렬화 XML 이거나 ToString을 구현하는 TypeConverter가있는 모든 데이터 유형을 저장할 수 있습니다 강력하게 유형화 된 설정, 즉 (ValuationInput) Settings.Default.Properties [ "ValuationInput"]. DefaultValue; 문자열 대신 객체를 반환합니다.