2014-06-16 50 views
0

我正在Mac OS X中使用Xamarin Studio(C#)开发iOS应用程序。我想在Facebook上获得用户的朋友列表,因此我添加了Facebook's component from Xamarin's component store并提出了一个请求(代码在底部)。这是我得到的回应:Facebook的朋友JSON响应无效

{ 
    data =  (
       { 
      "first_name" = Dev; 
      id = 100001438778777; 
      "last_name" = Accu; 
     } 
    ); 
    paging =  { 
     next = "https://graph.facebook.com/v2.0/100005203000814/friends?fields=id,first_name,last_name&format=json&access_token=CAAK3hGOIm2ABANPUcr2QU1t8gqLNsZCJBrc8ZCZCqUSwHkX2f43VHarvc1ZABbjDrY7jIO0OT5ZBRBiZC1audQnIvxCsOu60y30iR84jVa56beNTptixj7AFqT92ZBGdyxDshFHHxkFDgCg9JyRZBYfqaGKkeJkuxJVUXDq8eR8ZCmRlslpOVSavQZC1hCcxOwdgFS2jWQdGZBFVSYTkrhkavfP&limit=5000&offset=5000&__after_id=enc_Aey-LjP59ZnmKMcZKcEr94tTUPIHIvWj9JnMwkIVSvxJ9RBYBqhBt3bGKlURY4SHBCDeH8BM_wSsqICzEFgKiZvh"; 
    }; 
} 

有两个问题与此响应,它只包括1个朋友不知什么原因,和JSON是无效的,所以最终解析失败。下面是我使用,使请求的代码:

var friendsRequest = await new FBRequest(FBSession.ActiveSession, "/me/friends?fields=id,first_name,last_name").StartAsync(); 
    var friendsArray = friendsRequest.Result as MonoTouch.Foundation.NSMutableDictionary; 
    var response = FriendResponse.FromJson(friendsArray.ToString()); 

    List<FacebookProfile> friends = new List<FacebookProfile>(); 
    foreach (var friend in response.Data) 
    { 
     friends.Add(new FacebookProfile(friend.ID, friend.FirstName, friend.LastName)); 
    } 

这里是解析类:

public class NextPage 
{ 
    public string Next { get; set; } 
} 

public class Friend 
{ 
    public string ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

public class FriendResponse 
{ 
    public List<Friend> Data { get; set; } 
    public NextPage Paging { get; set; } 

    public static FriendResponse FromJson(string json) 
    { 
     JsConfig.EmitLowercaseUnderscoreNames = true; 
     return JsonSerializer.DeserializeFromString<FriendResponse>(json); 
    } 
} 
+2

来自Facebook V2.0“应用程序朋友:/我/朋友端点_不再包含一个人的朋友的完整列表。现在,它会返回那个也在使用您的应用程序的朋友的列表。 “ https://developers.facebook.com/docs/apps/changelog - 在'图表API' – bauerMusic

+0

@bauerMusic之下,这是有道理的,因为返回的朋友帐户也在使用该应用程序。谢谢。我留下了为什么返回的JSON格式无效。 – Ramsay

回答

0

组件是1:1结合Objective-C的SDK。 Facebook返回的响应是下面的NSDictionary,如果您在其上运行ToString(),它将返回与JSON 字符串完全不同的NSDictionary的字符串表示形式。你必须做的是将该NSDictionary对象序列化回JSON字符串。这里是如何做到这一点的一个例子:

var friendsRequest = await new FBRequest(FBSession.ActiveSession, "/me/friends?fields=id,first_name,last_name").StartAsync(); 

// Convert back the object into a Json 
NSError error; 
var jsonData = NSJsonSerialization.Serialize (friendsRequest.Result, 0, out error); 
var jsonString = (string) NSString.FromData (jsonData, NSStringEncoding.UTF8); 
var response = FriendResponse.FromJson(jsonString); 

“jsonString”这次将有正确的JSON字符串数据表示。

致谢Alex DeSoto。 =)