我正在尝试从WP7应用程序中获取SO api的结果。当我使用以下代码时,我能够在控制台应用程序中使用它
static void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
Console.Clear();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(RootObject));
var stream = new MemoryStream(Encoding.Default.GetBytes(e.Result));
var gzstream = new GZipInputStream(stream);
RootObject qs = ser.ReadObject(gzstream) as RootObject;
foreach (Question q in qs.questions)
{
Console.WriteLine(q.title);
}
}
重要的部分是Encoding.Default。如果我选择了其他任何东西,它将返回Error GZIP标头,第一个魔术字节不匹配'或类似的东西。
WP7没有默认值,它只有Unicode和UTF8,它们都不起作用。
想法?
答案 0 :(得分:1)
不要使用WebClient.DownloadString,请使用DownloadData。这样你就会收到GZip编码的字节(实际上不能转换成字符串),你可以将它直接传递给GZupInputStream。
答案 1 :(得分:1)
请改用WebRequest.BeginGetResponse。这样你可以得到@carlosfigueria建议的字节,但由于webclient只有getstring这是一个解决方法。