如何处理这个JSON数据?

时间:2011-04-15 12:45:08

标签: c# json facebook facebook-graph-api

我刚刚发现facebook使用FQL方法返回的JSON数据的格式与facebook图api返回的JSON格式不同。

例如:

FQL <> GRAPH

uid <> id

work_history <> work

education_history <> education

字段名称和数组中对象的结构也不同。

我在网站上使用FQL和GRAPH。因为我不想制作2个facebook用户类。我决定只使用图表api。

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

我不确定你是否需要我的代码,但如果你需要它来解决我的问题,这里是: (我想要处理的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 个答案:

答案 0 :(得分: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>();