C# 从Json或DataSets提取数据 - 从Python迁移(Json到字典)
我有一个Python脚本,需要把它转换成C#。这个脚本从一个网址获取JSON格式的响应,然后把它放进一个字典里。接着,它会检查里面是否有一个叫做next_page的数据,如果有数据(也就是不为空),它就返回true。下面我会贴出我写的C#代码,但我在最后一步上遇到了困难。我并不想深入了解JSON响应里的数据,我只想知道next_page这个字段是否存在。
# 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);
根据我在网上看到的,DataSet在你知道里面的数据是什么时效果最好。我只想知道是否有一个叫next_page的字段,如果有的话,它是空的还是有数据。我就是在从DataSet里提取信息时遇到了麻烦。
1 个回答
1
你需要添加一个叫做 JSON.net 的库,这个库可以通过 NuGet 包管理器来获取,链接是 http://james.newtonking.com/json。这个库可以帮助你把 JSON 格式的响应转换成一个字典(或者更好的是,转换成一个新的类),这样你就可以方便地访问这些响应数据。
比如,你可以在引入这个库之后,把下面的代码放到你的 try catch 语句里。
var dict = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(response);
另外,你也可以创建一个新的类,专门用来表示你期望的 JSON 数据,然后把 JSON 数据转换成这个类。
public class ResponseObject
{
public string next_page { get; set; }
}
var responseResult = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponseObject>(response);