2011-02-11 1 views
8

제 3 자로부터 나머지 API를 사용하기위한 API 래퍼 클래스 라이브러리를 만들었습니다.여러 개의 가능한 네임 스페이스로 xml을 비 직렬화

최근에 제품의 최신 버전에서 API를 최근에 업데이트하고 root 요소에 네임 스페이스를 추가하기 전까지는 모두 작동했습니다. 이제 deserialization 코드가 실패합니다.

내 클래스 중 하나의 예 : I 반환되는 새 네임 스페이스에 XmlRootAttribute를의 네임 스페이스 속성을 설정하면

[Serializable] 
[XmlRootAttribute(ElementName = "exit_survey_list")] 
public class SupportExitSurveyCollection : ApiResult { .... } 

, 그것은 다시 정상적으로 작동합니다.

하지만 사용할 수있는 API 버전을 알 수 없으므로 두 버전의 API (네임 스페이스 및 비공유)를 모두 지원해야합니다.

다른 버전의 클래스를 복제하지 않고이 작업을하고 싶지만 가능하면 확실하지 않습니다.

입력/조언 해 주셔서 감사합니다.

답변

1

나는 그것이 가능하지 않다고 생각합니다.

IXmlSerializable 인터페이스를 구현하고 직렬화를 직접 제어 할 수 있습니다. 작동하지만 원하는 코드가 아닐 수도 있습니다. 코드에서 많은 매핑 작업을 수행해야하기 때문입니다.

또 다른 옵션은 메시지를 사전 처리하고없는 경우 네임 스페이스를 추가하는 것입니다. 그런 다음 하나의 직렬화 해제 프로세스를 수행 할 수 있습니다.

+0

아이디어를 주셔서 감사 드리며 사전 처리 경로로 이동하여 모든 네임 스페이스 선언을 제거했습니다. 네임 스페이스를 다시 변경하기로 결정하면 앞으로도 계속 사용할 수 있습니다. – Adam