2015-05-19 60 views
0

JSON字符串從API返回:如何在C#中使用DataContractJsonSerializer處理這個簡單的JSON字符串?

{"status":0,"data":{"respondents":[{"date_modified":"2015-05-18 19:08:07","respondent_id":"3973604066"},{"date_modified":"2015-05-11 20:00:30","respondent_id":"3958700049"}],"page":1,"page_size":1000}} 

如果這是XML我只想用LINQ並將其存儲在一個List中的List。

我確信,如果我能得到如何處理這個問題的答案,我可以將它應用到更高水平。

我正在使用.net 3.5或4.0。

我無法通過CCB安裝Json.Net。

謝謝。

這是我的代碼:

類節目 {

public class StatusObj 
    { 
     public int status {get; set; } 
     public List<DataObj> data {get; set;} 
    } 

    public class DataObj 
    { 
     public List<RespondentObj> respondents { get; set; } 
     public int page {get; set;} 
     public int page_size {get; set;} 
    } 

    public class RespondentObj 
    { 
     public DateTime date_modified {get; set;} 
     public int respondent_id {get; set;} 
    } 


    static void Main(string[] args) 
    { 
     Console.WriteLine(DateTime.Now.ToString()); 
     Console.WriteLine("Pulling WSDL"); 

     // Removed the API Pull since I don't have issue there 

     var reader = new StreamReader(responseStream, Encoding.UTF8); 
     string json_returned = reader.ReadToEnd(); 
           // "{\"status\":0,\"data\":{\"respondents\":[{\"date_modified\":\"2015-05-18 19:08:07\",\"respondent_id\":\"3973604066\"},{\"date_modified\":\"2015-05-11 20:00:30\",\"respondent_id\":\"3958700049\"}],\"page\":1,\"page_size\":1000}}"; 
     Console.WriteLine(json_returned); 

     //This is what Cody Suggested 
     var deserializer = new JavaScriptSerializer(); 
     var results = deserializer.Deserialize<StatusObj>(json_returned); 

     foreach (var x in results.data) 
     { 
      foreach (var y in x.respondents) 
      { 
       Console.WriteLine(x.page); 
       Console.WriteLine(y.respondent_id); 
       Console.WriteLine(y.date_modified); 
      } 
     } 


     Console.ReadLine(); 
    } 

}

+0

什麼是建行?你的問題不清楚。 – Kashif

+0

@Kashif變更控制委員會,簡而言之,他們需要批准。 – JasonWilczak

+0

基本上你不能安裝任何json庫嗎? – Kashif

回答

2

我會使用內置的JavaScriptSerializer匹配類。所以,你會是這樣的:

public class StatusObj{ 
    public int status {get; set; } 
    public DataObj data { get; set; } 
} 

public class DataObj { 
    public List<RespondentObj> respondents {get set;} 
    public int page {get; set;} 
    public int page_size {get; set;} 
} 

public class RespondentObj{ 
    public DateTime date_modified {get; set;} 
    public Int64 respondent_id {get; set;} 
} 

然後你就可以反序列化流是這樣的:

var deserializer = new JavaScriptSerializer(); 
var results = deserializer.Deserialize<StatusObj>(stream); 
+0

我仍然**不**得到這個填充到結果。我假設我跟隨你的代碼,這應該manfest到一個StatusList與A中的數據列表在其中與受訪者列表。而且我可以使用嵌套的foreach來獲取數據。但結果只是沒有填充。我感謝你的幫助,這似乎很直接。 – KeithL

+0

@KeithL是拋出一個錯誤還是隻返回空結果?假設名稱相同並且結構相同,那麼如果這些名稱沒有填充,您也可以嘗試使用數組而不是列表。 – Cody

+0

我在代碼中添加了上面的代碼,減去API拉取部分。我似乎無法獲得結果的價值。 – KeithL

相關問題