2011-01-20 39 views
8

Tengo que usar facebook C# sdk para un nuevo poject en .net 3.5, soy consciente de que la última versión tiene ejemplos para 4, pero también está compilada contra 3.5, por lo que funciona completamente .JsonObject para modelar el SDK de Facebook

De todos modos, y perdónenme si estoy siendo increíblemente tonto. Pero estoy buscando convertir un objeto json en mi modelo, ¿puedo hacer algo como esto?

public ActionResult About() 
{ 
    var app = new FacebookApp(); 
    JsonObject friends = (JsonObject)app.Get("me/friends"); 
    ViewData["Albums"] = new Friends((string)friends.ToString()); 
    return View(); 
} 

public class Friends 
{ 
    public string name { get; set; } 
    public string id { get; set; } 

    public Friends(string json) 
    { 
     JArray jObject = JArray.Parse(json); 
     JToken jData = jObject["data"]; 

     name = (string)jData["name"]; 
     id = (string)jData["id"]; 
    } 
} 

Esto es mediante Json.Net. Obviamente esto no funciona, el error que recibo es

Error al leer JArray de JsonReader. El elemento actual de JsonReader no es una matriz: StartObject

Estoy bastante seguro de que estoy yendo por completo al revés, así que si alguien puede ofrecer algún consejo, estaría increíblemente agradecido.

Respuesta

14

Tal vez esto ayudaría código:

public class Friend 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

... 

public ActionResult About() 
{ 
    var app = new FacebookApp(); 
    var result = (JsonObject)app.Get("me/friends")); 
    var model = new List<Friend>(); 

    foreach(var friend in (JsonArray)result["data"]) 
     model.Add(new Friend() 
     { 
      Id = (string)(((JsonObject)friend)["id"]), 
      Name = (string)(((JsonObject)friend)["name"]) 
     }; 

    return View(model); 
} 

Ahora su modelo será de tipo List<Friend>

0

También puede asignar directamente a partir de los datos recibidos (JSON) a una lista de objetos utilizando Json.NET. Algo como esto:

var fbData = app.Get("me/friends")); 
var friendsList = JsonConvert.DeserializeObject<List<Friend>>(fbData.ToString()); 

Es muy corto y crea y llena la lista automáticamente.

Nota: El mapeo se realiza de una manera que no distingue entre mayúsculas y minúsculas (la propiedad de clase puede tener un caso diferente de la propiedad JSON).