所以我试图反序列化从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请求/响应的问题,我只是没有正确地反序列化。
我做错了什么?
答案 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项目的集合,其中包含一个单独的实例而不仅仅是一个令牌。
也许这就是你的反序列化不起作用的原因。