2014-11-03 60 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