Properties.Settings.Default를 사용하는 속성 기본값
문제
저는 .Net 2와 설정을 저장하는 일반적인 방법을 사용하고 있습니다.내 사용자 정의 개체를 xml로 직렬화하여 저장합니다.속성의 기본값을 검색하려고 합니다(다른 속성은 재설정하지 않고).나는 사용한다:
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;
해결책
어떤 시점에서는 그것이 당신이든 설정 클래스 내의 래퍼이든 관계없이 어딘가에서 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
다른 팁
@그르제니오,
객체 유형을 직접 사용하지 않는 이유는 무엇입니까?프로젝트 속성->설정 탭에서 설정 유형을 설정할 수 있습니다.유형 열의 드롭다운에서 찾아보기를 클릭하여 유형을 선택할 수 있습니다.
MSDN 인용:
애플리케이션 설정은 XML 시리얼이즈 가능하거나 ToString/FromString을 구현하는 타입 개수가있는 데이터 유형으로 저장할 수 있습니다.
이렇게 하면 강력하게 입력된 설정을 가질 수 있습니다.(ValuationInput) 설정.Default.Properties["ValuationInput"].DefaultValue;문자열 대신 객체를 반환합니다.