C#无法阅读API呼叫的JSON响应



我称之为天气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);

相关内容

  • 没有找到相关文章

最新更新