2012-01-16 4 views
2

J'essaye d'obtenir le mur de facebook mais j'ai des problèmes avec la structure JSON imbriquée.Get Facebook Mur Facebook C# SDK -> JSON imbriqué

Voici mon code jusqu'à présent

var wall = (JsonObject)fb.Get("me/feed"); 
List<FBWall> myWall = new List<FBWall>(); 
foreach (var obj in (JsonArray)wall["data"]) 
{ 
    FBWall myWall = new Wall(); 
    myWall.Id = (string)(((JsonObject)obj)["id"]); 

} 

chaîne réelle dans le mur arrive quelque chose comme ça

{"data":[{"id":"576376893_10150590188751894","from":{"name":"Afnan Bashir","id":"576376893"},"story":"\"how are you man??? \" on Xain Ul-Abiddin's timeline."........ and so on 

maintenant j'ai données, mais quand je fais (comme cela devrait venir comme ça parce que fichier principal contient d'autres tableaux de JSON)

(((JsonObject)obj)["from"]) Je reçois {"name":"Afnan Bashir","id":"576376893"}

maintenant comment voulez-vous écrire foreach pour obtenir tout sans aller à un autre foreach. Je pensais d'une certaine façon peut être avec Linq

Répondre

1

Il est toujours difficile de lancer un objet comme FbWall pour les résultats renvoyés de l'API graphique. Autant que j'aime la sécurité de type et pouvoir voir les erreurs de compilation, il était trop difficile de convertir les données dynamiques en un type.

Donc, je suis devenu ajusté à l'aide dynamic (si vous utilisez 4.0).

Si vous n'utilisez pas la version 4.0, vous pouvez continuer à utiliser wall["data][0]["from"][0]["name"] pour obtenir les valeurs de l'objet renvoyé. J'aime vraiment vivre dans la chaleur et le confort de la sécurité de type, et j'ai donné un coup de pied et ai crié de devoir vivre cette route inconnue et inconfortable. Tout ira bien, juste "mordre la balle" et "se faire faire".

+0

'je coups de pied et a crié d'avoir à vivre sur cette route inconnue et mal à l'aise. Ce sera bien, juste "mordre la balle" et "get 'er fait". 'Lolx –

+0

quand je fais' wall ["données"] [0] ["from"] 'J'ai une erreur' Impossible d'appliquer l'indexation avec [] à une expression de type 'object'' –

+0

'dynamic' est votre ami. – DMCS

2

Essayez cette

public class Post 
{ 
    public string ID { get; set; }  
    public BaseUser From { get; set; }  
    public string Text { get; set; }  
    public ItemType Type { get; set; }  
    public string Picture { set; get; }  
    public string Link { set; get; }  
    public string CreatedTime { get; set; }  
    public string UpdatedTime { get; set; } 
} 

public class BaseUser 
{ 
    public string ID { get; set; }  
    public string Name { get; set; } 
} 

public enum ItemType 
{ 
    Story, 
    Message 
} 
try 
{ 
    List<Post> posts = new List<Post>(); 
    dynamic p = (IDictionary<string, object>)fb.Get(userID + "/feed"); 
    foreach (dynamic item in p.data) 
    { 
    try 
    { 
     Dictionary<string, object>.KeyCollection keys = item.Keys;   
     Post post = new Post();   
     if (keys.Contains<string>("story")) 
     { 
      post.Type = ItemType.Story; 
      post.Text = item.story; 
      post.Link = item.link; 
      post.Picture = item.picture; 
     } 
     else if (keys.Contains<string>("message")) 
     { 
      post.Type = ItemType.Message; 
      post.Text = item.message; 
      //post.Link = user.Link; 
      //post.Picture = item.picture; 
     } 
     keys = null;   
     post.ID = item.id; 
     post.UpdatedTime = item.updated_time; 
     post.CreatedTime = item.created_time; 

     BaseUser baseUser = new BaseUser(); 

     dynamic from = item.from; 
     baseUser.ID = from.id; 
     baseUser.Name = from.name; 
     post.From = baseUser; 
     posts.Add(post);   
     } 
     catch (Exception) 
     {} 
    } 
    } 
    catch (Exception) 
    {} 
Questions connexes