2011-01-03 37 views
0

私はfb wallからデータベースにデータを格納しようとしています。JSONデータをdbに保存

FB壁からの投稿を取得する私の*は.csコード

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"); 
     } 

。 そして、私のwallpostsを断片(オブジェクト)にするか、あなたがそれらを呼びたいものを「分解する」* .aspxファイルがあります。

foreach (Facebook.JSONObject wallItem in wallPosts) 
     { 
      string wallItemType = wallItem.Dictionary["type"].String; 
       //AND SO ON... 

私が言っていることは、fb JSONの要素にアクセスできるということです。

* .csファイル内のJSON要素にアクセスできる方法はありますか。 * .aspxファイル内の要素をdbに格納する方法はありますか?

可能であれば、私はどのように知りたいのですか。 =)

ヘルプ

+0

あなたはどのFacebookライブラリを使用していますか、それはcsharp-sdkですか? https://github.com/facebook/csharp-sdk –

+0

私はこのsdkを使用しています - > http://facebooksdk.codeplex.com/releases/view/58239 – Sebastjan

答えて

1

SDKを使用しないでください。 HttpWebRequestを使用してJSONデータを取得し、次にSystem.Runtime.Serialization.Json.DataContractJsonSerializerを使用して逆シリアル化します。 JSONデータで返される同じプロパティを持つクラスを作成するだけで済みます。以下の例を参照

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

FacebookがJSON構造を変更してそれを返すとどうなりますか?プロダクションランドに配備されているクラスにマップされていませんか? –

+0

これらのプロパティは単純にマップされません。ディクショナリを使用しても、FBがそれを削除したときにキーがもう存在しないことがあります。独自のライブラリを作成することで、少なくとも変更を管理し、第三者に依存することはありません。 – Protean

1

のおかげで、私はFacebookのAPIに精通していないんだと質問があまりにも明らかではないが、私は、文字列wallItemTypeは、JSON文字列そのものであると仮定し、あなたがそれを解析したいです。

これを解析するには、Json.Netライブラリを使用します。

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 

また、Json.Netを使用してカスタムタイプにデシリアライズすることもできます。このカスタムタイプは、NHibernateを使用してSQLデータベースにマップできます。

json文字列全体をデータベースに格納する場合は、CouchDBなどのドキュメントデータベースを使用できます。

関連する問題