2016-01-04 3 views
2

Я использую Unity и SDK для Facebook.Deserializing Data From Facebook

В настоящее время я извлечение списка пользователей друзей, которые установили приложение с помощью графика 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 
} 
} 

В настоящее время я пытаюсь понять как я могу извлечь «Installed» и id из каждого объекта внутри объекта «data».

до сих пор я это делаю:

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

Но я не знаю, как я могу вытащить эти конкретные элементы из объектов.

Кто-нибудь знает, как я буду заниматься этим?

+0

взглянуть на [этой ссылке] (http://stackoverflow.com/questions/34573186/json-from-facebook- и-единство? noredirect = 1 # comment56910827_34573186) –

+0

Да, но набор данных JSON отличается в этом вопросе – coder4life22

+0

Вы получите «Словарь» против 'data'. Конечно, через 'object', затем проанализируйте этот' object (Dictionary) 'в' Dictionary'. Для самостоятельного копания сначала получите любую переменную через «var», затем распечатайте ее «Тип», затем выполните соответственно. –

ответ

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 
    } 
+0

Итак, у меня есть эта настройка сейчас, но теперь я получаю сообщение об ошибке: «Facebook.MiniJSON» не имеет определения для друзей RootObject = Json.Deserialize (result.RawResult); Итак, я предполагаю, что мне нужно написать код следующим образом: RootObject friends = Json.Deserialize (result.RawResult) как RootObject; ? – coder4life22

+0

Я не получаю сообщение об ошибке, когда пишу это так – coder4life22

+0

Я отредактировал свой ответ, попробую с «динамическим», в этом случае вам не нужно создавать классы. Все члены соответствуют случаю и имени полей в json, поэтому будьте осторожны, потому что вы получите null для свойств, которые не соответствуют имени json-поля. –

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;} 
} 
+0

var x = JsonConvert.DeserializeObject (jsonText); У меня нет этого метода – coder4life22

+0

Я могу сделать только var x = Json.Deserialize (text) как Response; и Json находится внутри пакета Facebook.MiniJson – coder4life22

+0

Я использую единство, кстати, – coder4life22