문제

저는 .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;문자열 대신 객체를 반환합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top