2016-06-16 2 views
0

날씨 API를 호출합니다.이 API는 Json 응답을 반환합니다. 오류 읽기 : below-로 구문 분석을 호출하는 동안 내 C는 # 코드 -이C# API 호출에서 json 응답을 읽을 수 없습니다.

  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.JsonReaderException'의 처리되지 않은 예외가 Newtonsoft.Json.dll

추가 정보에서 발생한 예외를 얻을 JsonReader의 JObject입니다. 현재 JsonReader 항목이 객체가 아닙니다 : StartArray. 내가 http://jsonlint.com/이 JSON을 선택하면 경로 '', 1 호선, 위치 1.

내 분석 - responseData1는

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\"}]" 

된 직후 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"속성의 값을 읽는 것입니다 below-있다. 누군가 나를 도와 줄 수 있습니까? 감사합니다.

http://www.newtonsoft.com/json/help/html/ParseJsonArray.htm

+0

안녕 다음과 같이

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을 역 직렬화 :

첫째,이 같은 모델을 만들어야합니다 @ DanielGimenez, 방금 스 니펫을 수정했습니다. 지금 확인해 주시겠습니까? – Saurabh

답변

4

배열입니다 이를위한 모델을 만드는 것이 더 좋습니다. 그런 다음 동적 유형을 사용하는 대신 JSON 문자열을 역 직렬화하도록 Newtonsoft에 알릴 수 있습니다.

var data1 = JsonConvert.DeserializeObject<WeatherData>(responseData1); 

을하거나 배열 :

var data1 = JsonConvert.DeserializeObject<List<WeatherData>>(responseData1); 
1

그것은 다음과 같습니다 아닌 값 Object - JSON 당신이 구문 분석을 시도하고 있기 때문에 당신의는 jarray 클래스를 사용한다 때 때, jobject 클래스를 사용하고

관련 문제