我称之为天气API-返回JSON响应。我的C#代码 -
Uri uri1 = new Uri(APIUrl);
WebRequest webRequest1 = WebRequest.Create(uri1);
WebResponse response1 = webRequest1.GetResponse();
StreamReader streamReader1 = new StreamReader(response1.GetResponseStream());
String responseData1 = streamReader1.ReadToEnd().ToString();
dynamic data1 = JObject.Parse(responseData1 )
我在将解析称为以下时会得到例外 - newtonsoft.json.dll
中的类型" newtonsoft.json.json.json.json.jsonreaderexception"类型的例外附加信息:jsonreader的错误读取职位。当前的JSONREADER项目不是一个对象:StartArray。路径'',第1行,位置1。
我的分析 - 响应data1的json字符串为 -
responseData1="[{"locationName":"Bangalore","subLocationName":null,"gid":"43295","subStateID":null,"subStateName":null,"stateID":"II","stateName":"Indien","latitude":12.9667,"longitude":77.5833,"altitude":900,"zip":null}n, {"match":"yes"}]"
如果我在http://jsonlint.com/中检查此JSON,则说明有效的JSON。
如果我直接在浏览器中击中我的apiurl-在浏览器中休息如下 -
[{"locationName":"Bangalore","subLocationName":null,"gid":"43295","subStateID":null,"subStateName":null,"stateID":"II","stateName":"Indien","latitude":12.9667,"longitude":77.5833,"altitude":900,"zip":null}, {"match":"yes"}]
我的目的是阅读上述JSON的属性" GID"的价值。有人可以在这里帮我吗?谢谢!
您使用的是jarray类时,因为您正在尝试解析的JSON是一个数组 - 不是对象:
http://www.newtonsoft.com/json/help/html/parsejsonarray.htm
最好为此创建一个模型。然后,您可以简单地告诉Newtonsoft对JSON字符串进行估算,而不是使用动态类型。
首先,您需要创建这样的模型:
public class WeatherData
{
public string locationName { get; set; }
public string subLocationName { get; set; }
public string gid { get; set; }
public int subStateID { get; set; }
public string subStateName { get; set; }
public string stateID { get; set; }
public string stateName { get; set; }
public double latitude { get; set; }
public double longitude { get; set; }
public int altitude { get; set; }
public string zip { get; set; }
public string match { get; set; }
}
然后对返回json进行挑选:
var data1 = JsonConvert.DeserializeObject<WeatherData>(responseData1);
或用于数组:
var data1 = JsonConvert.DeserializeObject<List<WeatherData>>(responseData1);