2014-11-03 57 views
0

我有以下Python腳本,我需要移植到C#。這會從URL獲得JSON響應,然後將其彈出到字典中。然後它檢查next_page數據,如果有數據(它不是空的),它會返回true。在下面,我將粘貼我擁有的C#代碼,但我真的很努力去做最後的部分。我不知道,我當然也不想理解JSON響應中的數據,我只是想知道next_page字段是否存在。C#從Json或DataSets提取數據 - 從Python移植(Json到Dict)

# Gets JSON response 
response = requests.get(url, auth=(user, pwd)) 

if response.status_code != 200: 
    print('Status:', response.status_code, 'Problem with the request. Exiting.') 
    exit() 

data = response.json() 

if(data['next_page']): 
    return True 
else: 
    return False 

因此,這是C#代碼我有:

using Newtonsoft.Json; 

string response = ""; 

using (WebClient client = new WebClient()) 
{ 
    client.UseDefaultCredentials = true; 
    client.Credentials = new NetworkCredential(user, password); 

    try 
    { 
     response = client.DownloadString(url); 
    } catch (Exception e) 
    { 
     throw e; 
    } 
} 

XmlDocument xml = JsonConvert.DeserializeXmlNode(json, "RootObject"); 
XmlReader xr = new XmlNodeReader(xml); 
DataSet ds = new DataSet("Json Data"); 

ds.ReadXml(xr); 

從我所看到的網絡數據集最好的工作,當你知道里面的是數據。我只想知道是否有一個名爲next_page的字段,如果有,它是空的還是有數據。我只是努力從DataSet中獲取任何東西。

回答

1

您將需要包含JSON.net nuget包(http://james.newtonking.com/json),這樣您可以將JSON響應反序列化爲允許您訪問響應的字典(或最好是新類)。

例如,包括圖書館

var dict = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(response); 

Alternativly你可以創建一個表示預期JSON一個新的類和反序列化到該

public class ResponseObject 
{ 
    public string next_page { get; set; } 
} 

var responseResult = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseObject>(response); 
+0

不幸的是我已經嘗試過之後添加到您的嘗試捕捉這第一種方法,它無法將其轉換。我得到以下錯誤:JsonReaderException被捕獲:讀取字符串時出錯。意外的令牌:StartArray。 Path'tickets',line 1,position 12. 但是,您的第二個解決方案就像一個魅力! – Cephlin 2014-11-03 15:04:48

+1

這將是因爲JSON不是一個簡單的字典,在C#中它總是更好地嘗試和具體的事物鏈接,而不是從字典中讀取魔術字符串,然後你可以通過類型安全莊園傳遞它。第二種方法應該可以正常工作。 – tocsoft 2014-11-03 15:07:37

+0

謝謝,這只是爲了拉一個頁面,然後檢查是否有下一頁並拉出,然後保存總輸出,所以除了next_page以外的任何內容都是不相關的,並且會浪費我的大量資源時間,但這是很好的知道。謝謝你的幫助 :) – Cephlin 2014-11-04 10:36:35