如何从Facebook Graph API中取消序列化JSON?

时间:2010-07-16 01:12:54

标签: c# .net json facebook serialization

所以我试图反序列化从Graph API OAuth令牌调用返回的JSON。

JSON看起来像这样:

  

“[{\” 的access_token \ “:\” bunchofjsondatablahblah “\ ”过期\“:9999}]”

我正在尝试将它(使用DataContractJsonSerializer类)反序列化到此对象中:

[DataContract]
internal class FacebookOAuthToken
{
     [DataMember]
     internal string access_token;

     [DataMember]
     internal string expires;
}

以下是im(尝试)如何做到这一点:

FacebookOAuthToken token;
using (Stream responseStream = (response.GetReponseStream()))
{
   DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(FacebookOAuthToken));
   token = (FacebookOAuthToken)json.ReadObject(responseStream);
}

此技术基于MSDN的this文章。

但是,token的属性始终为null。

如果我做responseStream.ReadToEnd(),那就没关系了(返回上面的JSON) - 这意味着它不是实际HTTP请求/响应的问题,我只是没有正确地反序列化。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

好的,事实证明我使用了错误的Graph API URL(看起来似乎如此)。

这就是Facebook API文档的问题,它遍布整个地方,不同的线程(谷歌,堆栈溢出)说出了不同的处理方式。

我更改为网址https://graph.facebook.com/oauth/access_token?{0}而不是https://graph.facebook.com/oauth/exchange_sessions?{0},现在它返回一个基本字符串(非JSON)。

所以它根本不需要序列化。

尽管如此,有些人可能会遇到与我相同的问题,在这种情况下,我不确定如何解决。

我现在正在使用定义的方法here

答案 1 :(得分:0)

如果我正确地解释了JSON字符串,它代表了一个FacebookOAuthToken项目的集合,其中包含一个单独的实例而不仅仅是一个令牌。

也许这就是你的反序列化不起作用的原因。