Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从Facebook Graph API反序列化JSON?_C#_.net_Json_Facebook_Serialization - Fatal编程技术网

C# 如何从Facebook Graph API反序列化JSON?

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

因此,我试图对从Graph API OAuth令牌调用返回的JSON进行反序列化

JSON如下所示:

[{\access\u token\:\bunchofjsondatablahblah,\expires\:9999}]

我正在尝试使用DataContractJsonSerializer类将其反序列化到以下对象中:

[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连接问题,服务器正在运行