无法解析JSON输出

时间:2015-02-05 12:10:00

标签: c# json xamarin

我正在使用Oauth2从Facebook获取有关用户的信息。我得到的结果是JSON格式,但是当我尝试使用JSON.NET解析它时,我得到一个错误:异常:System.ArgumentException:不完整的JSON输入。在第1行,第0列。

示例代码:

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);
    }
  }
});

t.Result.GetResponseText()方法以这种格式返回一个字符串:

{
"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
}

有人能够指出我在这里缺少的东西吗?提前谢谢!

3 个答案:

答案 0 :(得分:2)

错误消息表明响应文本为空字符串(不完整的JSON输入,第一行,第一个字符)。

只是预感:如果将响应文本存储在临时变量中,问题是否会自行解决?

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

这样做的原因是t.Result.GetResponseText()仅在您第一次调用它时返回一个值。底层流不支持搜索,JSON阅读器不会在内部缓存该值。

答案 1 :(得分:2)

创建一个可以反序列化给定json数据的类

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

反序列化json数据
var data = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(t.Result.GetResponseText());

为我工作了 希望这有帮助

答案 2 :(得分:0)

感谢Steven Liekens,我们发现t.Result.GetResponseText()方法只会在第一次调用时返回一些内容。第二次它返回一个空字符串。