2010-03-05 6 views
5

xsd.exe에서 XSD 스키마로 생성 한 .cs 파일이 거의 없습니다.xsd.exe 생성 클래스가 기본값 속성을 직렬화하지 않음

내 문제는 그 클래스를 xml로 직렬화하려고하면 값이 xsd 스키마에 정의 된 기본값과 일치하는 속성이 직렬화되지 않는다는 것입니다.

나는 내가 기본 필드를 나타내는 구성원 [System.ComponentModel.DefaultValueAttribute(typeof(<someType>), "<SomeValue>")] 속성을 제거 할 때 내 문제가 해결되는 것을 발견했다.

내 질문에 더 우아한 방법이 없습니까? 예를 들어 어쨌든 기본값을 직렬화하도록 지정하는 방법이 있습니까?

답변

4

짧은 버전 : 예. 그것은 가장 간단한 접근 방법 인 것 같습니다. 나는 "명백한"일을 시도했습니다

(특히 *SpecifiedShouldSerialize* 패턴이 XmlSerializer 지원뿐만 아니라 IsNullable)과 그냥 값을 포함하지 않음을 유지합니다.

다음 옵션은 IXmlSerializable (보통 하드) 또는 XmlAttributeOverrides (노력의 중복) 중 하나 일 수 있습니다. 둘 다 특히 매력적이지 않습니다. 귀하의 현재 접근 방식이 효과가 적은지 궁금합니다. 물론 WSDL을 내보내고 편집하여 기본값을 제거하고 편집 된 버전에서 생성 할 수 있습니다.

제쳐두고 - 이것이 WCF 인 경우 일 경우 [DataMember(EmitDefaultValue = ...)]입니다. 어쩌면 그들은 이것을 기능 요청으로 추가했을 것입니까?

+0

답변 해 주셔서 감사합니다. 실제로 현재의 접근 방식은 최선의 방법은 아니지만 더 적은 작업입니다. IXmlSerializable 또는 XmlAttributeOverrides를 사용하여 여유 시간을 가질 수도 있습니다. – Koynov