1

作为 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 等)

4

2 回答 2

0

我以前做过这个确切的事情,除了我转换成一个 XML,我的例子:

(1 - JavaScript) var finalStr = JSON.stringify(facebookString)
(2 - ASP.NET) JsonConvert.DeserializeXmlNode("{\"root\":" + received_json + "}","root");
于 2013-11-11T22:11:36.967 回答
0

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

name例如,要访问或start_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");

可能有更好的实现,但这个在我的情况下有效。我把它贴出来了,以防它对看到这篇文章的其他人有帮助。

最好的祝愿。

于 2013-11-12T20:16:18.290 回答