2010-06-01 5 views
1

XMLSerializer를 사용하여 동적으로로드되는 유형의 클래스를 직렬화해야합니다.XML 직렬화를 위해 런타임에 동적으로로드되는 유형의 속성에 기본값을 설정하는 방법

XML 직렬 변환기를 사용할 때 초기화되지 않은 값은 직렬화되지 않습니다. 내가 사용하고있는 어셈블리를 제어 할 수 없으므로 XML 특성을 사용하여 속성의 기본값을 지정할 수 없습니다. 그래서 모든 속성과 하위 속성을 기본값으로 재귀 적으로 설정 한 다음 직렬화해야한다고 생각합니다.

this 이어 (더 좋은 방법이 있으면 알려 주시기 바랍니다) :

Activator.CreateInstance로 (하여 PropType를);

위 라인은 일부 유형에 매개 변수없는 생성자가 없다는 것에 대해 불평합니다.

시도 됨 this : subObject = FormatterServices.GetUninitializedObject (propType); 하지만 내부 예외가없는 "값이 잘못되었습니다"라는 오류가 표시됩니다.

추가 정보가 필요하면 알려주십시오.

답변

1

문제의 유형에 매개 변수없는 public 생성자가없는 경우 문제가 발생합니다. 애트리뷰트 이슈는 XmlAttributeOverrides 오브젝트를 받아들이는 constructor overload 오브젝트를 사용하여 기본값을 포함한 시리얼 라이저를 완벽하게 구성 할 수 있지만 (XmlAttributes.XmlDefaultValue을 통해), 할 수없는 일들 - 생성자 제한을 벗어나기 그들 중 하나입니다.

여기에 시나리오가 무엇입니까? 당신이 무슨 말 같은 사람을 보이지만 단순하고 통제하에 일부 개체 : 당신이 XML을 원하는 경우

  • 는, 그때는 DTO 층을 소개합니다. XmlSerializer에 이상적입니다. 그런 다음 직렬화를 원할 경우 (그리고 XML이 구현 세부 사항 인 경우)
  • 사이에 매핑 할 코드를 작성한 다음 도움이되는 다른 serializer가 있습니다. 예를 들어, DataContractSerializer 또는 protobuf-net; 여기 어느 것이 더 다재다능 할 것입니다.
관련 문제