从Facebook反序列化数据

时间:2016-01-04 06:23:10

标签: c# json facebook-unity-sdk

我正在使用Unity和Facebook SDK。

目前,我正在检索使用图表API安装了应用的朋友列表:

返回时的数据如下:

{
"data": [
{
  "installed": true,
  "id": "1292282928282"
},
{
  "installed": true,
  "id": "29282829292"
}
],
"paging": {
"next": "https://graph.facebook.com/v2.5/105157539862931/friends?fields=installed&format=json&access_token=CAALVPHznNpcBAOnO94HvqUgYKI2kObPZBgR0sqIOMSRO9swZBBTWHb6FjliZCT1KyCmPbnX42xvtngboh3DjFOrixw0pSenwRZA1oXZAHNDdYcGsHNOHjQcZB0f6fsZBQJjhOTttwQu7E5hZBDcAWJVZBGK2AxrZBDZBxLL7I5pjXwwbb12hDytZAiVzUmNzi1Ae2CCvOnL6QCpqzsJT7fWWjXXi&limit=25&offset=25&__after_id=enc_AdB7PJbXYkDSSZAq33AjPXZAeRnlrZBDwjAAILZAg3emHdei0qdRLa2AeD6sRuX6h0OQuPQi8x8bvSHPy0EqIgybYL89"
},
"summary": {
"total_count": 2
}
}

目前我正在试图弄清楚如何从“data”对象中的每个对象中提取“已安装”和id。

到目前为止,我正在这样做:

Dictionary<object,object> friendsList = Json.Deserialize (result.RawResult) as Dictionary<object,object>;

但我不确定如何从对象中提取这些特定项目。

有谁知道我会怎么做呢?

3 个答案:

答案 0 :(得分:1)

您需要拥有能够为您保存反序列化数据的类。例如,创建以下类:

public class Datum
{
    public bool installed { get; set; }
    public string id { get; set; }
}

public class Paging
{
    public string next { get; set; }
}

public class Summary
{
    public int total_count { get; set; }
}

public class RootObject
{
    public List<Datum> data { get; set; }
    public Paging paging { get; set; }
    public Summary summary { get; set; }
}

RootObject是根类,因此反序列化代码为:

var deserialized = Json.Deserialize<RootObject>(result.RawResult);

通过使用动态关键字

,还有一种方法可以在不创建类的情况下完成
static void Main(string[] args)
    {

      var stringVal = @"{
    ""data"": [
    {
  ""installed"": true,
      ""id"": ""1292282928282""
},
{
    ""installed"": true,
  ""id"": ""29282829292""
}
],
""paging"": {
    ""next"": ""https://graph.facebook.com/v2.5/105157539862931/friends?        fields=installed&format=json&access_token=CAALVPHznNpcBAOnO94HvqUgYKI2kObPZBgR0sqIOMSRO9swZBBTWHb6FjliZCT1KyCmPbnX42xvtngboh3DjFOrixw0pSenwRZA1oXZAHNDdYcGsHNOHjQcZB0f6fsZBQJjhOTttwQu7E5hZBDcAWJVZBGK2AxrZBDZBxLL7I5pjXwwbb12hDytZAiVzUmNzi1Ae2CCvOnL6QCpqzsJT7fWWjXXi&limit=25&offset=25&__after_id=enc_AdB7PJbXYkDSSZAq33AjPXZAeRnlrZBDwjAAILZAg3emHdei0qdRLa2AeD6sRuX6h0OQuPQi8x8bvSHPy0EqIgybYL89""
},
""summary"": {
    ""total_count"": 2
}
}";

      dynamic x = JsonConvert.DeserializeObject(stringVal);
      var data = x.data;
    foreach(var d in data)
    {
      bool installed = d.installed;
      long id = d.id;
      // todo: use the id and installed 
    }

答案 1 :(得分:0)

在Linqpad中运行它,它将返回已安装的属性。

void Main()
{
    string jsonText =
@"{
    ""data"": [
    {
  ""installed"": true,
      ""id"": ""1292282928282""
},
{
    ""installed"": true,
  ""id"": ""29282829292""
}
],
""paging"": {
    ""next"": ""https://graph.facebook.com/v2.5/105157539862931/friends?fields=installed&format=json&access_token=CAALVPHznNpcBAOnO94HvqUgYKI2kObPZBgR0sqIOMSRO9swZBBTWHb6FjliZCT1KyCmPbnX42xvtngboh3DjFOrixw0pSenwRZA1oXZAHNDdYcGsHNOHjQcZB0f6fsZBQJjhOTttwQu7E5hZBDcAWJVZBGK2AxrZBDZBxLL7I5pjXwwbb12hDytZAiVzUmNzi1Ae2CCvOnL6QCpqzsJT7fWWjXXi&limit=25&offset=25&__after_id=enc_AdB7PJbXYkDSSZAq33AjPXZAeRnlrZBDwjAAILZAg3emHdei0qdRLa2AeD6sRuX6h0OQuPQi8x8bvSHPy0EqIgybYL89""
},
""summary"": {
    ""total_count"": 2
}
}";

 var x = JsonConvert.DeserializeObject<Response>(jsonText);
 //To Get installed
 x.data.Select(d => d.installed).Dump();
}

public class Response
{ 
    public Data[] data;
    public Paging paging;
    public Summary summary;
}

public class Data
{
    public bool installed { get; set; }
    public string id { get; set; }
}

public class Paging
{
    public string next { get; set; }
}

public class Summary
{
    public int total_count { get; set;}
}

答案 2 :(得分:0)

使用迷你json:https://developers.facebook.com/docs/unity/reference/current/Json

咨询此示例以获取朋友列表