【发布时间】:2010-07-16 01:12:53
【问题描述】:
所以我正在尝试反序列化从 Graph API OAuth 令牌调用返回的 JSON。
JSON 看起来像这样:
"[{\"access_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 的 this 文章。
但是,token 的属性始终为空。
而如果我执行responseStream.ReadToEnd(),一切都很好(返回上面的 JSON)——这意味着实际的 HTTP 请求/响应没有问题,我只是没有正确反序列化它。
我做错了什么?
【问题讨论】:
-
只是出于好奇,如果你在 using 语句的内容周围抛出一个 try/catch ......是否会抛出任何异常?
-
没有抛出异常。我认为这是使用 Stream 的问题。也许我应该使用 StreamReader 或其他东西......所以我现在正在玩这个。我也在考虑改用 JavaScriptSerializor ..
-
您可以尝试将流的位置设置为 0 吗?
-
我现在遇到了一个异常 - “遇到了意外的字符 'a'。”。我之前没有遇到异常,因为 API 没有返回任何内容 - 显然 Facebook 在他们做出更改后今天遇到了一些问题 - 很多 API 调用都达到了 500 次。
-
@pbz - 如果我尝试将流设置为位置 0,我会收到“NotSupportedException - 此流不支持查找操作”。认为你只能使用 StreamReader 设置位置
标签: c# .net json facebook serialization