2013-04-09 4 views
3

사용자 정의 컨트롤의 속성을 직렬화하는 방법은 무엇입니까?XML 직렬화 - 사용자 정의 컨트롤의 속성 직렬화

나는 다음과 같은 코드를 시도했지만 XmlSerializer를 개체

를 만드는 동안 나는, InvalidOperationExceptio있어
MyUserControl userControl = new MyUserControl(); 
XmlSerializer serializer = new XmlSerializer(typeof(MyUserControl)); 
Stream stream = new MemoryStream(); 
TextWriter writer = new StreamWriter(stream); 
serializer.Serialize(writer, userControl); 

예외 :

System.InvalidOperationException이었다 처리되지 않은

HRESULT = -2146233079

메시지 = 'Demo.M'유형을 반영하는 중에 오류가 발생했습니다. yUserControl '.

+0

비슷한 문제가 생기면 데이터를 클래스에 바인딩 한 다음 serialize합니다. 사용자가 이름이나 사용자 정의 속성/값과 같은 데이터 바인딩 특성에 대해 이야기하고 있습니까? – Sayse

+0

시도해 보셨습니까? http://www.codeproject.com/Articles/27158/XamlWriter-and-Bindings-Serialization –

답변

1

이 IMHO처럼하지 마세요.

직렬화 할 데이터를 보유 할 별도의 "DTO (Data Transfer Object)"스타일 클래스를 작성하고 대신 을 사용해야합니다. 물론 데이터를 앞뒤로 변환하는 Transform 메서드를 작성해야합니다.

그렇지 않으면 데이터 저장 형식을 사용자 정의 컨트롤에 강하게 연결합니다.

직렬화에 별도의 클래스를 사용하면 향후에 새 속성을 추가해야하는 경우 특히 관리하기 쉽고 유연 해집니다.

당신은보다는 특성이 직렬화 얻을 수있는에 "선택 하에서"메커니즘이 DataContract serialization를 사용하여 시도 할 수 당신은 정말 사용자 제어를 직렬화해야한다 (그리고 내가보기 엔 당신이하지을 하는 것이 좋습니다) 경우 이전 직렬화를위한 "옵트 아웃"메커니즘.

+0

UserControl이 Serializable 또는 DataContract로 표시되어 있지 않으므로 DataContract serialization으로 문제가 해결되지 않으므로 파생 형식을 DataContractSerializer로 serialize 할 수 없습니다. –