2014-03-01 2 views
1

C# 테스트 자동화를 작성하여 JSON 문자열을 반환하는 웹 서비스의 유효성을 검사합니다. 내가 반환 된 것에 매핑 된 DataContract를 만들었습니다.C#을 사용한 조건부 JSON 역 직렬화

{"DataModule" : {"required":"false", "location":"toolbar"}} 

내 테스트 자동화가 잘 작동했지만, 나는이 오류 받기 시작 :이 반환되고 있던 것입니다 가정

"The data contract type 'DataModule' cannot be deserialized because the required data members 'required, location' were not found."

을 나는 JSON 데이터 모듈은 지금

했다 확인
{"DataModule" : {"width":"400", "height":"320"}} 

첫 번째 유형의 데이터 모듈이 발견되면 클라이언트는이를 파싱하고 툴바에 버튼을 생성한다는 것을 발견했습니다. 두 번째 유형의 데이터 모듈이 반환되면 단추가 도구 모음에 표시되고 해당 측정 값이있는 다른 위치에 패널이 나타납니다.

데이터 계약에서 선택적 멤버를 만들거나 여러 구현을 가질 수있는 JSON 개체를 설명하기 위해 조건부 비 직렬화를 구현하는 방법이 있습니까? 당신이 가능성의 모든 속성과 모델을 선언하면

답변

0

나는 이미 모든 추가 시도했다

그 속성들, 그러나 내가 옳은 길 위에 있다는 것을 알았 기 때문에, 당신의 제안은 나를 뭔가 다른 것으로 키웠다. 속성은 모두

[System.Runtime.Serialization.DataMemberAttribute(IsRequired = false)] 

으로 장식되었지만 클래스 자체는 [Serializable]으로 장식되었습니다. 내가 변경했을 때 [Serializable]

[System.Runtime.Serialization.DataContractAttribute()] 

으로 바꾸기 시작했습니다. 데이브-SI @

0

는 만 JSON 문자열에서 발견 된 것들 채워집니다 : 데이브-S @

public class DataModule 
{ 
    public bool Required { get; set; } 
    public string Location { get; set; } 
    public string Width { get; set; } 
    public string Height { get; set; } 
} 
+0

이 시도, [직렬화] 공공 추상 클래스 데이터 모듈 { 공공 부울이 필요; public string location; [System.Runtime.Serialization.DataMemberAttribute (IsRequired = false)] public int Width; [System.Runtime.Serialization.DataMemberAttribute (IsRequired = false)] public int 높이; } \t 여전히 받아 들여집니다 : 필수 데이터 멤버 인 '너비, 높이'를 찾을 수 없기 때문에 'DataModule'데이터를 deserialize 할 수 없습니다. 반환되는 DataModule이 버튼에만 해당되는 경우. – KRM