2011-04-15 55 views
1

我刚刚发现,使用FQL方法由facebook返回的JSON数据具有与由facebook图形API返回的JSON不同的格式。如何处理这个JSON数据?

例如:

FQL <> GRAPH 

uid <> id 

work_history <> work 

education_history <> education 

另外的字段名称和对象的在阵列中的结构是不同的。

我使用FQL和GRAPH为我的网站。因为我不想制作2个Facebook用户类。我决定只使用图形api。

我正在尝试获取al用户的朋友列表,其中包括工作和教育数据。

我不知道,如果你需要我的代码,但如果你需要它来解决我的问题,那就是: (JSON字符串我想处理更加下文)

public static List<FbUser> getFriends(string id, string token) 
{ 

    //get all id's of friends 
    string jsonUrl = graphUrl + "/" + id + "/friends?access_token=" + token; 
    var json = new WebClient().DownloadString(jsonUrl); 
    FbUserList useridlist = JsonConvert.DeserializeObject<FbUserList>(json); 

    //get all data of friends 
    jsonUrl = graphUrl + "?ids=" + useridlist.getIds() + "&access_token=" + token; 
    json = new WebClient().DownloadString(jsonUrl); 
    List<FbUser> userlist = JsonConvert.DeserializeObject<List<FbUser>>(json.Insert(0,"[") + "]"); 
    return userlist; 

} 

useridlist的.cs

public class FbUserList 
{ 
    private List<FbObject> _data; 

public List<FbObject> data 
{ 
    get 
    { 
     return _data; 
    } 
    set 
    { 
     _data = value; 
    } 
} 

public string getIds() 
{ 
    string result = ""; 
    foreach (FbObject o in _data) { 
     result += o.id + ","; 
    } 
    string test = result.Substring(0, result.Length - 1); 
    return test; 
} 
} 

在此之后,在JSON变量,我得到了以下数据:

[{"505757632":{"id":"505757632","name":"Cecilia demo","first_name":"Cecilia", ....}, 
    {"507493765":{"id":"507493765","name":"Bjorn demo","first_name":"Bjorn", .....} 
    , ... ] 

我不知道如何从这些数据中获得用户对象列表。 一个用户对象具有如下字段:id,name,first_name,...所以我需要摆脱缠绕在我的用户对象周围的附加对象。

任何帮助非常感谢!

+1

反序列化为字典,然后从字典中获取值? – 2011-04-15 12:57:31

回答

5

翘曲用户记录的对象是一个字典。

class FbUser() 
{ 
    public string id { get;set;} 
    public string name { get;set;} 
    public string first_name { get;set;} 
    .... a property name for every data element in the returned record. 
} 


Dictionary<string,FbUser> userlist = JsonConvert.DeserializeObject<Dictionary<string,FbUser>(); 

如果你确实需要数据作为列表,你可以做类似的事情。

List<FbUser> userlist = JsonConvert.DeserializeObject<Dictionary<string,FbUser>().Values.ToList<FbUser>(); 
+0

谢谢!这正是我需要的! – ThdK 2011-04-15 13:10:11

+1

哦,你的答案只有一个小的错字: 列表 userlist = JsonConvert.DeserializeObject >(json).Values.ToList (); – ThdK 2011-04-15 19:16:10

+0

谢谢你的抬头。情报已经宠坏了我。 – 2011-04-17 15:20:13