2009-08-11 4 views
2

사용자 정의 클래스를 서비스 메서드 매개 변수로 사용하는 RESTful WCF 응용 프로그램이 있습니다. 이러한 클래스는 [DataContract] 특성으로 장식되며 각 속성은 [DataMember] 특성으로 장식되어 있습니다.데이터 멤버 순서 및 XML 비 직렬화

디시리얼라이저는 MSDN의 데이터 멤버 주문 페이지 ( http://msdn.microsoft.com/en-us/library/ms729813.aspx)와 일치하여 작동합니다.

즉, XML 형식의 입력 데이터에있는 요소가 설명 된 순서를 따르기를 기대합니다. 사실, 요소 중 하나가 순서가 맞지 않으면 비 직렬화 후에 제출 된 값이 없지만 null입니다.

호출 프로그램이 xml 요소를 자유롭게 (즉, 임의의 순서로) 정렬하고 요소의 모든 순서에 대해 직렬화 해제를 올바르게 수행하도록하는 좋은 방법이 있습니까?

+0

나는이 질문이 다소 오래되었다는 것을 알고 있지만 다음과 같은 유사한 주제의 질문이있다. http://stackoverflow.com/questions/1727682/wcf-disable-deserialization-order-sensitivity – Reddog

+0

가능한 중복 [WCF Datacontract, 일부 필드 deserialize하지 마시오] (https://stackoverflow.com/questions/2519240/wcf-datacontract-some-fields-do-not-deserialize) – Vlad

답변

2

대부분의 XML에서는 요소를 임의의 순서로 입력 할 수 없습니다. 내가 아는 한 이것을 허락 할 충분한 이유가 없다.

데이터 계약 직렬화 기가이 기능을 전혀 지원하지 않습니다. 그것은 오버 헤드를 추가하고 아무 가치도 제공하지 않습니다.

발신자가 올바른 XML을 보낼 수없는 이유는 무엇입니까?

+0

John, 답변 해 주셔서 감사합니다. 당신은 "데이터 계약 Serializer 전혀 지원하지 않습니다." 이 말을 직접하는 Microsoft 설명서 나 다양한 출처에서 모아 놓았습니까? –

+0

@Ralph : 당신은 스스로 이렇게 말했습니다. "XML 형식의 입력 데이터에서 엘리먼트가 이렇게 기술 된 순서를 따르길 기대합니다." 또한 수년간 데이터 계약 직렬화와 XML 직렬화의 차이점에 대한 다양한 기사를 통해 데이터 계약 직렬화가 빠르고 간단하게 이루어질 수 있다는 것을 분명히했습니다. 선택 사항은 "단순하지"않으며 값을 추가하지 않습니다. –

+0

@ 랄프 : 왜 이것을하고 싶은지 묻는 질문을 업데이트하십시오. 발신자가 올바른 XML을 보낼 수없는 이유는 무엇입니까? –