C# 如何从Facebook Graph API反序列化JSON?
因此,我试图对从Graph API OAuth令牌调用返回的JSON进行反序列化 JSON如下所示: [{\access\u token\:\bunchofjsondatablahblah,\expires\:9999}] 我正在尝试使用DataContractJsonSerializer类将其反序列化到以下对象中:C# 如何从Facebook Graph API反序列化JSON?,c#,.net,json,facebook,serialization,C#,.net,Json,Facebook,Serialization,因此,我试图对从Graph API OAuth令牌调用返回的JSON进行反序列化 JSON如下所示: [{\access\u token\:\bunchofjsondatablahblah,\expires\:9999}] 我正在尝试使用DataContractJsonSerializer类将其反序列化到以下对象中: [DataContract] internal class FacebookOAuthToken { [DataMember] internal string
[DataContract]
internal class FacebookOAuthToken
{
[DataMember]
internal string access_token;
[DataMember]
internal string expires;
}
以下是我如何努力做到这一点:
FacebookOAuthToken token;
using (Stream responseStream = (response.GetReponseStream()))
{
DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(FacebookOAuthToken));
token = (FacebookOAuthToken)json.ReadObject(responseStream);
}
此技术基于MSDN的文章
但是,令牌的属性始终为空
但是如果我执行responseStream.ReadToEnd,它会返回上面的JSON,这意味着实际的HTTP请求/响应没有问题,我只是没有正确地反序列化它
我做错了什么?好吧,看来我使用了错误的Graph API URL 这就是Facebook API文档的问题所在,它到处都是,谷歌的不同线程、堆栈溢出说了不同的方法 我将URL改为{0}而不是{0},它现在返回一个非JSON的基本字符串 所以它根本不需要序列化 尽管如此,有些人可能会有和我一样的问题,在这种情况下,我不知道如何解决
我现在使用的是定义的方法。如果我正确解释JSON字符串,它将表示FacebookOAuthToken项的集合,其中包含一个实例,而不仅仅是一个令牌
也许这就是反序列化不起作用的原因。只是出于好奇,如果您对using语句的内容抛出try/catch…是否抛出任何异常?是否抛出任何异常。我认为这是使用流的一个问题。也许我应该使用StreamReader,或者其他什么东西…所以我现在正在玩这个。我也在考虑改用JavaScriptSerializer。你能试着将流的位置设置为0吗?我现在得到一个异常-遇到意外字符“a”。。我以前没有遇到异常,因为API没有返回任何内容-显然Facebook在做出更改后今天出现了一些问题-很多API调用都得到了500个。@pbz-如果我尝试将流设置为0,我会得到一个NotSupportedException-此流不支持seek操作。我想你只能用StreamReaderTrue设置位置。说得好。我现在已经实现了反序列化——通过使用不同的Facebook Graph API,请参见下面我的答案。使用这个新的API,您不需要对令牌进行反序列化,但需要对其他API调用进行反序列化—使用上面的原始代码,这些调用可以正常工作。我最初问题的原因是今天发生的间歇性FB连接问题,服务器正在运行