2009-10-19 5 views
2

나머지 인터페이스에서 XML 문서를 가져 오는 간단한 테스트 응용 프로그램이 있습니다. 데이터 요소에는 두 개의 문자열 필드와 두 개의 부울 필드가 있습니다. 간단한 엔티티 클래스를 만들고 DataContractAttribute를 배치 한 다음 각 데이터 멤버에 DataMemberAttributes를 추가했습니다. 그런 다음 HttpResponseMessage.Content.ReadAsDataContract()를 사용하여 응답을 구문 분석합니다. 모든 문자열 유형은 정상적으로 처리되지만 모든 부울 유형은 false입니다 (실제로 거짓이 아닙니다).DataMemberAttribute에 부울 유형을 사용하려면 어떻게해야합니까?

[DataMember(Name="is-enabled")] 
public bool isEnabled 
{ 
    get 
    { 
     return this.isEnabledField; 
    } 
    set 
    { 
     this.isEnabledField = value; 
    } 
    } 

가 어떻게 부울 값이 제대로을 통해 오는받을 수 있나요 : 내가 좋아하는 뭔가를 내 타입 클래스의

<is-enabled type="boolean">true</is-enabled> 

다음 : XML 요소는 무엇인가인가?

답변

0

그것은 작동해야하지만 제일 먼저 데이터 멤버 이름에서 대시 "-"를 제거하는 것이 좋습니다. (de) serializer가 대시를 내부적으로 질식시키고 올바른 멤버에 매핑하지 않아서 기본 bool 값인 false를 제공 ​​할 가능성이 있습니다.

나중에 복합 변수 이름을 더 읽기 쉽게 만들 필요가 있다고 생각되면 밑줄을 시도하십시오.

+0

나는 그것을 바꿀 수 없다. 그것은 내가 소비하고있는 서비스의 회원 이름이다. – MikeD

1

믿거 나 말거나 DataContractSerializer는 deserialize 될 XML 문서의 요소 순서에 민감합니다. DataMemberAttribute의 Order 속성을 설정하여 부모 요소의 다른 자식 사이에서 "is-enabled"의 실제 위치와 일치시킬 필요가 있습니다.

관련 문제