문제

참고 : XMLIgnore 는 답이 아닙니다!

좋습니다. XML 직렬화 및 상속 된 유형 에 대한 제 질문에 이어 계속하겠습니다. 저는 그 코드를 제가 작업중인 애플리케이션에 통합하기 시작했습니다. 어리석게도 모든 것이 잘 될 것이라고 생각했습니다.

IEnumerable ICollection 을 구현하는 몇 가지 클래스에서 문제가 발생했습니다.

이것의 문제는 XMLSerializer가이를 직렬화 할 때 외부 속성으로 간주하고 원하는 속성 (즉, AbstractXmlSerializer 이있는 속성)을 사용하지 않는다는 것입니다. ) 여기에 와서 넘어져 (유형 불일치로 인해) 거의 우리를 정사각형으로 되돌립니다. XmlIgnore 속성으로 이러한 메소드를 데코레이션 할 수 없으므로 그렇게 멈출 수 없습니다.

현재 내 솔루션은 인터페이스 구현을 제거하는 것입니다 (이 현재 애플리케이션에서는 큰 문제가 아니며 코드를 더 예쁘게 만들었습니다).

이것에 대한 자부심을 삼켜야하고 할 수 없다는 것을 받아 들여야하나요? 예상했던 것보다 XmlSerializer에서 더 많은 것을 얻었습니다. p> <시간>

수정

또한 추가해야합니다. 현재 프레임 워크 2에서 작업 중입니다. <시간>

업데이트

lomaxx의 답변 을 수락했습니다. . 내 시나리오에서는 실제로이 작업을 수행 할 수 없지만 작동 할 것이라는 것을 알고 있습니다. 다른 제안이 없었기 때문에 코드에서 인터페이스 구현을 제거했습니다.

도움이 되었습니까?

해결책

System.RunTime.Serialization dll (.net 3.x 어셈블리)을 가져와 .net 2.0 애플리케이션에서 참조하여이 문제를 해결할 수 있습니다.이는 .net 3.0 바이너리가 .net 2.0 CLR에서 실행되도록 컴파일 되었기 때문에 작동합니다.

이렇게하면 ICollection을 매개 변수로 웹 서비스에 전달하고 xmlserializer가 처리 방법을 몰랐던 비슷한 문제를 해결하는 데 사용한 DataContractSerliazer에 액세스 할 수 있습니다.제대로.

2.x 애플리케이션에서 .net 3.x dll을 사용하는 것이 쿨하다면 DataContractSerializer를 사용하여이 문제를 해결할 수 있습니다.

다른 팁

해답이 너무 늦어 특정 애플리케이션에 유용하지 않은 것 같지만 다른 사람들이 같은 문제를 겪고있을 수도 있습니다.

이 동작을 해결하기 위해 IEnumerable 유형에 대해 IXmlSerializable을 구현할 수 있다고 가정합니다.그러나 이것은이 유형에 대한 직렬화 프로세스를 완전히 제어해야 함을 의미합니다.XmlReader / XmlWriter를 엉망으로 만들 필요가없는 간단한 방법으로, 직렬화 할 모든 데이터의 공용 ctor 및 공용 읽기-쓰기 속성을 사용하여 도우미 xml 어댑터 클래스를 작성하고 내부에이 유형에 대한 임시 XmlSerializer 개체를 만들 수 있습니다.IXmlSerializable. [읽기 | 쓰기] Xml (). 라코 디스

다음 속성을 사용하는 경우 : 라코 디스

ProviderPatientList가 유전 태그 코드를 상속하는 경우

그러면 출력되는 xml을 더 많이 제어 할 수 있습니다. 생성됩니다

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