在db中存储JSON数据

时间:2011-01-03 18:14:54

标签: c# asp.net asp.net-mvc facebook api

我正在尝试将数据从fb wall存储到数据库中。

我的* .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");
        }

从fb wall获取帖子。 然后我有一个* .aspx文件,它将我的墙柱“打破”成碎片(物体)或者你喜欢称之为的任何东西。

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

我想说的是我可以访问fb JSON中的元素。

有没有办法可以访问* .cs文件中的JSON元素。 或者有没有办法将* .aspx文件中的元素存储到db?

如果可能,我想知道如何。 =)

感谢您的帮助

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
            }