2015-02-05 3 views
0

Facebook에서 사용자에 대한 정보를 얻으려면 Oauth2를 사용하고 있습니다. 내가 얻는 결과는 JSON 형식이지만 JSON.NET을 사용하여 구문 분석하려고하면 예외가 발생합니다. Exception : System.ArgumentException : 불완전한 JSON 입력. 라인 1 열에서 0JSON 출력을 구문 분석 할 수 없습니다.

샘플 코드 :

{ 
"id":"some_id", 
"bio":"some_bio", 
"first_name":"some_name", 
"gender":"male", 
"last_name":"some_name", 
"link":"https:\/\/www.facebook.com\/app_scoped_user_id\/some_user_id\/", 
"locale":"nb_NO", 
"middle_name":"some_name", 
"name":"some_name", 
"timezone":1, 
"updated_time":"2014-09-18T12:48:34+0000", 
"verified":true 
} 

내가 여기 실종 무엇을 지적 할 수있는 사람과 같습니다 t.Result.GetResponseText() 방법이 형식의 문자열을 반환

request.GetResponseAsync().ContinueWith(t =>{ 
if(!t.IsFaulted && !t.IsCanceled){ 
    try{ 
     Console.WriteLine(t.Result.GetResponseText()); 

     dynamic obj = JsonObject.Parse(t.Result.GetResponseText()); 
     Console.WriteLine(obj.first_name); 

    } catch (Exception e) { 
     Console.WriteLine("Exception : "+ e); 
    } 
    } 
}); 

? 미리 감사드립니다!

+0

디버깅 해 보셨습니까? JSON이 유효한 것 같습니다 ... –

+0

이것은 오류 메시지입니다. 나는 또한 JSON이 유효하다고 생각한다. 그래서 나는 이해하지 않는다. 예외 : System.ArgumentException : 불완전한 JSON 입력. 줄 1에서 열 0 at System.Runtime.Serialization.Json.JavaScriptReader.ReadCore() [0x00225] in ///Library/Frameworks/Xamarin.iOS.framework/Versions/8.6.0.51/src/mono/mcs/ class/System.ServiceModel.Web/System.Runtime.Serialization.Json/ – user2236165

답변

2

오류 메시지는 응답 텍스트가 빈 문자열 (불완전한 JSON 입력, 첫 번째 줄, 첫 번째 문자)임을 나타냅니다.

잠깐 만요 : 응답 텍스트를 임시 변수에 저장하면 문제가 해결됩니까?

var responseText = t.Result.GetResponseText(); 
Console.WriteLine(responseText); 
dynamic obj = JsonObject.Parse(responseText); 

이 작동하는 이유는 t.Result.GetResponseText()는 값을 당신이 전화를 처음으로 반환합니다. 기본 스트림은 탐색을 지원하지 않으며 JSON 판독기는 값을 내부적으로 캐시하지 않습니다.

+0

아니요. 그렇지만 JSON 문자열을 문자열 변수에 복사 한 다음 deserialize 메서드에서 사용하면 데이터 객체가 null이 아닙니다. . t.Result.GetResponseText()를 사용하면 데이터 객체가 null입니다. 응답 텍스트를 임시 변수에 저장하면 데이터 객체도 null입니다. – user2236165

+0

't.Result.GetResponseText()'의 반환 값이 수동으로 붙여 넣는 문자열과 분명히 다르다. –

+0

사실,하지만 다시 나는 그것이't.Result.GetResponseText()'를 출력 할 때 내가 원래의 글에서 썼던 것과 정확히 일치하는 JSON 문자열을 얻는다. – user2236165

2

public class Rootobject 
     { 
      public string id { get; set; } 
      public string bio { get; set; } 
      public string first_name { get; set; } 
      public string gender { get; set; } 
      public string last_name { get; set; } 
      public string link { get; set; } 
      public string locale { get; set; } 
      public string middle_name { get; set; } 
      public string name { get; set; } 
      public int timezone { get; set; } 
      public DateTime updated_time { get; set; } 
      public bool verified { get; set; } 
     } 

다음 나를 위해 일한 JSON.NET

var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(t.Result.GetResponseText()); 

를 사용하여 JSON 데이터를 역 직렬화 주어진 JSON 데이터를 역 직렬화 할 수있는 클래스를 만듭니다
희망이

+0

더 이상 JSON 오류 메시지가 표시되지 않지만 Console.WriteLine (data.id)과 같은 데이터 객체에서 아무 것도 출력하지 않으면 NullReferenceException이 발생합니다. 너 그걸로받을 수 있니? – user2236165

+0

편집 : 이상한.JSON 문자열을 문자열 변수에 복사 한 다음 deserialize-method에서 사용하면 데이터 객체가 null이 아닙니다. t.Result.GetResponseText()를 사용하면 데이터 객체가 null입니다. – user2236165

0

감사를하는 데 도움이 Steven Liekens에게 우리는 t.Result.GetResponseText() 메서드가 처음 호출 할 때만 뭔가를 반환한다는 것을 알았습니다. 두 번째로 빈 문자열을 반환합니다.

관련 문제