0

我正在尝试从 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。如果我选择其他任何东西,它会返回错误 GZIP 标头,第一个魔术字节不匹配'或类似的东西。

WP7 没有默认值,它只有 Unicode 和 UTF8,它们都不起作用。

想法?

4

2 回答 2

1

不要使用 WebClient.DownloadString,使用 DownloadData。这样,您将收到 GZip 编码的字节(不能真正转换为字符串),您可以将其直接传递给 GZupInputStream。

于 2011-05-17T20:21:06.563 回答
1

改用 WebRequest.BeginGetResponse。通过这种方式,您可以获得@carlosfigueria 建议的字节,但由于webclient 只有getstring,这是一种解决方法。

于 2011-05-17T20:31:03.647 回答