2012-11-21 5 views
3

나는 (내가 통제하지 않고 변경할 수 없습니다) 다음과 같은 두 가지 목적이 있습니다 내가 JSON에서이 데이터를 검색하는 GET 호출을 만들기 위해 위해 RESTClient를 사용하고json 직렬화가 실패하는 이유는 무엇입니까?

[Serializable] 
[DataContract] 
public class AddressContactType : BaseModel 
{ 
    public AddressContactType(); 

    [DataMember] 
    public string AddressContactTypeName { get; set; } 
} 

[Serializable] 
[DataContract] 
public abstract class BaseModel 
{ 
    protected BaseModel(); 

    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public string NativePMSID { get; set; } 
    [DataMember] 
    public string PMCID { get; set; } 
} 

합니다. 요청이 성공합니다. 반환 된 JSON은 다음과 같습니다.

[{"Id":0,"NativePMSID":"1","PMCID":"1020","AddressContactTypeName":"Home"},{"Id":0,"NativePMSID":"2","PMCID":"1020","AddressContactTypeName":"Apartment"},{"Id":0,"NativePMSID":"3","PMCID":"1020","AddressContactTypeName":"Vacation"},{"Id":0,"NativePMSID":"3","PMCID":"1020","AddressContactTypeName":"Other"}] 

그 시점부터 세 가지 다른 방식으로 데이터를 비 직렬화하려고했습니다.

내 코드 : " 'System.Collections.Generic.IDictionary`2를 [입력 할 유형'RestSharp.JsonArray '의 개체를 캐스팅 할 수 없습니다 : 시도 1에서

var request = new RestRequest("AddressContactType", Method.GET); 
     request.AddHeader("Accept", "application/json"); 
     request.AddParameter("PMCID", "1020"); 

     #region JSON Deserialization 

     // ---- Attempt #1 
     var response = client.Execute<AddressContactType>(request); 

     // ---- Attempt #2 
     var myResults = response.Content; 

     var ms = new MemoryStream(Encoding.UTF8.GetBytes(myResults)); 
     var ser = new DataContractJsonSerializer(typeof(AddressContactType)); 
     var result = (AddressContactType)ser.ReadObject(ms); 

     // ---- Attempt #3 
     var jsonSettings = new JsonSerializerSettings() 
     { 
      Formatting = Formatting.Indented, 
      DateFormatHandling = DateFormatHandling.MicrosoftDateFormat, 
      DateTimeZoneHandling = DateTimeZoneHandling.Utc, 
      PreserveReferencesHandling = PreserveReferencesHandling.Objects 
     }; 

     var result2 = new AddressContactType(); 
     result2 = JsonConvert.DeserializeObject<AddressContactType>(new StreamReader(ms).ReadToEnd(), jsonSettings); 

     #endregion 

에서, 위해 RESTClient 시도가 ​​오류를 반환 System.String, System.Object] '. "

시도 2에서 개체 결과는 올바른 속성 (Id, NativePMSID, PMCID 및 AddressContactTypeName)으로 표시되지만 모두 null이며 각 인스턴스가 하나만 표시됩니다.

시도 3은 result2에 대해 null 값을 반환합니다.

제안 사항?

감사합니다.

답변

3

내 문제의 해결책이 나타납니다

 List<AddressContactType> myResults2; 

     using (Stream ms2 = new MemoryStream(Encoding.UTF8.GetBytes(myResults))) 
     { 
      myResults2 = JsonConvert.DeserializeObject<List<AddressContactType>>(new StreamReader(ms2).ReadToEnd()); 
     } 

내가 이전 단계 중 하나 듯했으나이 나에게 목록을했다.

+0

고마워요! 왜 그것이 효과가 있는지 설명해 주시겠습니까? – OriBr

관련 문제