2010-04-26 7 views
2

기본적으로 초기 문제는 부울 값을 0 또는 1로 serialize해야합니다. 내가 찾은 솔루션은 IXmlSerializable을 구현하는 것입니다. 불행히도 직렬화하려는 클래스는 스키마에서 생성 된 코드이며 XmlTypeAttribute가 있습니다.XmlTypeAttribute가있는 생성 된 클래스에 IXmlSerializable 구현

System.InvalidOperationException: Only XmlRoot attribute may be specified for the type ______ Please use XmlSchemaProviderAttribute to specify schema type.

두 가지 옵션이 immediatly 마음에 와서 :

1)를 제거 내가하려고하면 (드)는이 예외를 throw 일반적인 방법 (new XmlSerializer(type))에서 만든 XmlSerializer를 사용하여 개체를 직렬화 속성을 생성합니다. 이 변경은 코드가 다시 생성 될 때마다 수행되어야합니다.

2) 특성을 제거하기 위해 serializer를 만들 때 XmlAttributeOverrides 개체를 사용하십시오. 따라서 나머지 코드베이스는 해당 속성을 재정의해야한다는 것을 "알"있어야합니다. 또한 throw 된 예외는이를 해결하기 위해 수행해야 할 작업에 대한 단서를 제공하지 않습니다.

두 옵션 모두 악취가납니다. 세 번째 옵션이 있습니까?

+1

_why_'[XmlType]'속성이 있습니까? –

+0

Xsd2Code가 생성 한 방식입니다. 내가 사용하고있는 스키마가 거대한 짐승이라고 말하는 것은 삼가면서 말하는 것입니다. Xsd.exe와 다른 도구 중 하나가 사용자 지정 라이브러리를 사용하여 40MB의 코드를 충돌 시키거나 뱉어 냈습니다. 다른 이유로 인해 어쨌든 생성 된 코드를 수정해야했습니다. 그러나이 문제와 관련된 세 번째 방법이있는 경우 다른 문제도 해결 될 수 있습니다. –

답변

0

IXMLSerializable 작품을 제거하는 데 동일한 문제가 있습니다. 사용하지 않고 속성에서 일부 논리를 사용하여 true 또는 false를 숨기려고 했습니까? 이와 같이 :

private bool mblnFlag; 

public String Flag 
{ 
    get 
    { 
     return mblnFlag; 
    } 
    set 
    { 
     mblnFlag = (value == "1") 
    } 
} 

물론 속성을 향상시키고 더 많은 검사를 수행해야하지만 그게 좋은 생각입니다.

+0

나는 XmlTypeAttribute를 주석 처리하여 내 문제를 해결했지만 생성 코드를 수정하는 것이 더러워졌고 생성 된 코드를 수정하지 않는 세 번째 옵션이 필요하다고 생각했습니다. 나는 아마 꿈을 꾸고있을 것이다. ( –