在C#中反序化Facebook Json结果

时间:2013-11-11 21:46:01

标签: c# json facebook windows-runtime windows-store-apps

我从Facebook图表搜索请求中得到以下Json格式字符串:

{
  "data": [
    {
      "name": "Event A", 
      "start_time": "2013-11-08T19:00:00+0200", 
      "end_time": "2013-11-10T00:00:00+0200", 
      "timezone": "Europe/Bucharest", 
      "id": "232252355126"
    }, 
    {
      "name": "Event B", 
      "start_time": "2013-11-08T13:00:00+0200", 
      "end_time": "2013-11-09T16:00:00+0200", 
      "timezone": "Europe/Bucharest", 
      "location": "Bucharest", 
      "id": "414334343426"
    }, 
    {
      "name": "Event C", 
      "start_time": "2013-10-30T18:30:00+0200", 
      "timezone": "Europe/Bucharest", 
      "location": "Bucharest", 
      "id": "44315995273"
    }
  ], 
  "paging": {
    "previous": "https://graph.facebook.com/search?limit=3&type=event&q=Bucharest&since=1383930000&__paging_token=22251255126", 
    "next": "https://graph.facebook.com/search?limit=3&type=event&q=Bucharest&until=1383150600&__paging_token=44115995273"
  }
}

我在尝试从此JSON检索数据时遇到了一些错误。我试过

dynamic jsonData = await facebookClient.GetTaskAsync(string.Format("https://graph.facebook.com/search?q={0}&type=event&limit={1}&offset={2}", locationKeyword, limit, offset));
dynamic result = JsonConvert.DeserializeObject(jsonData.ToString());

有些答案指示我使用JavaScriptSerializer,但我没有该类的命名空间,因为我正在使用API​​来开发Windows 8应用程序。

我无法管理如何以某种方式从data对象获取事件。

我尝试访问VS中的即时窗口中的值result.data,但它无效。

我搜索如何制作这个,但大多数答案似乎都说要创建一个json数据适合的类。

我无法用dynamic实现这一目标吗? (类似于result.data.name,result.paging.previous等)

2 个答案:

答案 0 :(得分:0)

之前我做过这件事,除了我转换成XML,我的例子:

(1 - JavaScript) var finalStr = JSON.stringify(facebookString)
(2 - ASP.NET) JsonConvert.DeserializeXmlNode("{\"root\":" + received_json + "}","root");

答案 1 :(得分:0)

我终于设法访问了成员......

例如,要访问namestart_time,我执行了以下操作:

dynamic jsonData = await facebookClient.GetTaskAsync(string.Format("https://graph.facebook.com/search?q={0}&type=event&limit={1}&offset={2}", locationKeyword, limit, offset));

var result = JObject.Parse(jsonData.ToString());
var array = new JArray(result["data"]);

var a = array[0];

string name = (string) a.SelectToken("name");
var date = (DateTime?) a.SelectToken("start_time");

可能有更好的实现,但这个在我的情况下工作。我发布了它,以防其他人看到这篇文章可能会有所帮助。

祝福。