2011-01-03 4 views
0

J'essaie de stocker des données de la paroi fb dans la base de données.stocker des données JSON dans db

Mon * Code de

public ActionResult GetWall() 
     { 
      JSONObject wallData = helper.Get("/me/feed"); 
      if (wallData != null) 
      { 
       var data = wallData.Dictionary["data"]; 
       List<JSONObject> wallPosts = data.Array.ToList<JSONObject>(); 
       ViewData["Wall"] = wallPosts; 
      } 

      return View("Index"); 
     } 

qui obtient les messages du mur fb. Et puis j'ai un fichier * .aspx, qui "casse" mes poteaux en morceaux (objets) ou tout ce que vous voulez les appeler. Ce que j'essaie de dire, c'est que je peux accéder aux éléments à l'intérieur de fb JSON.

Est-il possible d'accéder aux éléments JSON dans le fichier * .cs? Ou est-il possible de stocker des éléments à l'intérieur du fichier * .aspx sur db?

Et si c'est possible, j'aimerais savoir comment. =)

Merci pour l'aide

+0

quelle bibliothèque Facebook utilisez-vous, est-ce le csharp-sdk? https://github.com/facebook/csharp-sdk –

+0

J'utilise ce sdk -> http://facebooksdk.codeplex.com/releases/view/58239 – Sebastjan

Répondre

1

N'utilisez pas le SDK. Récupérez les données JSON à l'aide de HttpWebRequest, puis désérialisez-le à l'aide de System.Runtime.Serialization.Json.DataContractJsonSerializer. Vous venez de créer une classe avec les mêmes propriétés renvoyées dans les données JSON. Voir l'exemple ci-dessous

string Response = Utilities.HttpUtility.Fetch("https://graph.facebook.com/me?access_token=" + AccessToken, "GET", string.Empty); 
      using (System.IO.MemoryStream oStream = new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(Response))) 
      { 
       oStream.Position = 0; 
       return (Models.FacebookUser)new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(Models.FacebookUser)).ReadObject(oStream); 
      } 
+0

Que se passe-t-il lorsque Facebook change la structure JSON retournée et ne correspond pas à votre classe qui est déployée dans la terre de production plus? –

+0

Ces propriétés ne seront tout simplement pas mappées. Même si vous utilisez un dictionnaire, il peut arriver que la clé n'existe plus car FB l'a supprimé. En écrivant votre propre bibliothèque, vous avez au moins le contrôle sur les changements et ne dépendez pas d'une tierce partie. – Protean

1

Je ne suis pas familier avec l'API facebook et la question est pas trop claire, mais je suppose que la wallItemType de chaîne elle-même est une chaîne JSON, et que vous souhaitez l'analyser .

J'utiliserais la bibliothèque Json.Net pour analyser ceci.

using Newtonsoft.Json; 

//your code as above 

foreach (Facebook.JSONObject wallItem in wallPosts) 
    { 
     string wallItemType = wallItem.Dictionary["type"].String; 
     //I assume wallItemType is a JSON string {"name":"foobar"} or similar 

     JObject o = JObject.Parse(wallItemType); 

     string name = (string)o["name"]; //returns 'foobar' 
     //and so on 

Vous pouvez également utiliser Json.Net pour désérialiser un type personnalisé. Ce type personnalisé peut être mappé à une base de données SQL à l'aide de NHibernate.

Si vous souhaitez stocker l'intégralité de la chaîne json dans une base de données, vous pouvez utiliser une base de données de documents telle que CouchDB.