Вам нужно создать такую структуру:
public class Friends
{
public List<FacebookFriend> data {get;set;}
}
public class FacebookFriend
{
public string id {get;set;}
public string name {get;set;}
}
Тогда вы должны иметь возможность сделать:
Friends facebookFriends = new JavaScriptSerializer().Deserialize<Friends>(result);
Имена моих классов - всего лишь пример. Вы должны использовать правильные имена.
Добавление образца теста:
string json=
@"{""data"":[{""id"":""518523721"",""name"":""ftyft""}, {""id"":""527032438"",""name"":""ftyftyf""}, {""id"":""527572047"",""name"":""ftgft""}, {""id"":""531141884"",""name"":""ftftft""}]}";
Friends facebookFriends = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Friends>(json);
foreach(var item in facebookFriends.data)
{
Console.WriteLine("id: {0}, name: {1}",item.id,item.name);
}
Производит:
id: 518523721, name: ftyft
id: 527032438, name: ftyftyf
id: 527572047, name: ftgft
id: 531141884, name: ftftft
Отличным способом автоматического создания этих классов для вас является копирование вашего JSON-вывода и его бросок здесь:
Он предоставит вам начальную точку, чтобы подправить ваши классы для десериализации.
очень легко мы можем разобрать json с помощью словаря и JavaScriptSerializer. Вот пример кода, по которому я разбираю json из файла ashx.
var jss = new JavaScriptSerializer();
string json = new StreamReader(context.Request.InputStream).ReadToEnd();
Dictionary<string, string> sData = jss.Deserialize<Dictionary<string, string>>(json);
string _Name = sData["Name"].ToString();
string _Subject = sData["Subject"].ToString();
string _Email = sData["Email"].ToString();
string _Details = sData["Details"].ToString();
Newtonsoft.JSON
является хорошим решением для подобных ситуаций. Кроме того, Newtonsof.JSON
работает быстрее других, таких как JavaScriptSerializer
, DataContractJsonSerializer
.
В этом примере вы можете:
var jsonData = JObject.Parse("your json data here");
Затем вы можете использовать jsonData для JArray
, и вы можете использовать для цикла для получения данных на каждой итерации. Кроме того, я хочу что-то добавить.
for (int i = 0; (JArray)jsonData["data"].Count; i++)
{
var data = jsonData[i - 1];
}
Работа с динамическим объектом и использование сериализации Newtonsoft - хороший выбор.
Я согласен с Icarus (мог бы прокомментировать, если бы мог), но вместо использования класса CustomObject я бы использовал словарь (в случае, если Facebook добавит что-то).
private class MyFacebookClass
{
public IList<IDictionary<string, string>> data { get; set; }
}
или
private class MyFacebookClass
{
public IList<IDictionary<string, object>> data { get; set; }
}