2013-03-12 87 views
0

我正在爲JSON Web服務調用並獲得以下的JsonJSON響應到C#自定義對象

{ 
    "Content": { 
     "CallId": "345353-981b-41a8-a108-a5d6891a7987", 
     "Detail": { 
      "ConversationId": "345353-981b-41a8-a108-a5d6891a7987", 
      "UserId": "d232ad07-3fb6-4ecd-85f7-1c41a8c43013", 
      "Region": "beta.us", 
      "GroupId": "CT-VIP", 
      "WalletId": "d232ad07-3fb6-4ecd-85f7-1c41a8c43013", 
      "TrunkId": "d232ad07-3fb6-4ecd-85f7-1c41a8c43013" 
     }, 
     "CallService": { 
      "Region": "beta.us", 
      "Id": "764bac3af1d84c7db8fe49b2f76e64c0" 
     } 
    }, 
    "Status": "OK" 
} 

我使用下面的代碼,使請求並得到響應:

public string MakeCallTrucnkCall(string url) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Headers.Add("X-Client:" + "dfsdfs; dsfsdfsf; 151.1.1; 1"); 
     request.Headers.Add("X-Authenticator-Session:" + "code here"); 

     try 
     { 
      WebResponse response = request.GetResponse(); 

      using (Stream responseStream = response.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
       return reader.ReadToEnd();     
      } 
     } 
     catch (WebException ex) 
     { 
      WebResponse errorResponse = ex.Response; 
      using (Stream responseStream = errorResponse.GetResponseStream()) 
      { 
       StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 
       String errorText = reader.ReadToEnd(); 

       // log errorText 
      } 
      throw; 
     } 
    } 

在的情況下,錯誤,我得到這樣的響應:

{ 
    "Status": "ERR", 
    "Errors": [ 
     { 
      "Code": "Err_Auth_NoInfo" 
     } 
    ] 
} 

這將返回響應,我現在用reader.ReadToEnd轉換爲字符串。但我想將此響應轉換爲我的自定義對象。我讀過一些我可以使用Javascript序列化類的地方,但是我的類應該由這個json填充的屬性是什麼?

我是否需要像下面這樣的課程?

public class APIResponse{ 
public Content {get;set;} 
public CallId {get;set;} 
public ConversationId {get;set;} 
public Detail {get;set;} 
public UserId {get;set;} 
public Region{get;set;} 
} 

還是會不一樣?我不知道JSON如何映射到自定義對象,我應該擁有哪些屬性以及如何在我的自定義對象而不是字符串上獲得響應。請建議。

回答

1

你的C#類應該看起來像你的JSON數據:

public class APIResponse 
{ 
    public APIContent Content { get; set; } 
    public string Status { get; set; } 
} 

public class APIContent 
{ 
    public string CallID { get; set; } 
    public APIDetail Detail { get; set; } 
    public APICallService CallService { get; set; } 
} 

...

然後,你可以反序列化:

JavaScriptSerializer serializer = new JavaScriptSerializer(); 
APIResponse response = serializer.Deserialize<APIResponse>(request);