C# JSON 到字符串 Visual Studio 2017

C# JSON to String with Visual Studio 2017

我正在 Visual Studio 2017 年构建一个 UWP 应用程序,我想将来自 Office365 REST API 的 JSON-Response 转换为一个字符串,以将其显示在 XAML.

HttpClient client2 = new HttpClient();
var token2 = await AuthenticationHelper.GetTokenHelperAsync();
client2.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
HttpResponseMessage eventresponse = await client2.GetAsync(new Uri("https://outlook.office.com/api/v2.0/me/calendarview?startDateTime=2017-01-01T00:00:00&endDateTime=2017-04-05T12:00:00"));

我无法获取 json.net,我猜它不兼容。 我尝试了以下方法:

using (Stream stream = eventresponse)
{
    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    String responseString = reader.ReadToEnd();
}

但是我无法将 HttpResponseMessage 转换为 System.IO.Stream。

JavaScriptSerializer 似乎不适用于 UWP 应用程序。

DataContractJsonSerializer 也无法转换为 char。

所以我 运行 不可能 Solutions/overseeing 我犯了一个大错误。

改变

using (Stream stream = eventresponse)
{
    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    String responseString = reader.ReadToEnd();
}

string responseString = await eventresponse.Content.ReadAsStringAsync();

或者像你的代码一样使用流..

if (eventresponse.IsSuccessStatusCode)
{
    using (Stream stream = await eventresponse.Content.ReadAsStreamAsync())
    {
        using (StreamReader reader = new StreamReader(stream))
        {
            var responseString = reader.ReadToEnd();
        }
    }
}

HttpResponseMessage而言,响应主体是一系列字节。它与它们实际代表的内容无关。

您可以通过 Content member and use methods on that member to direct how they the bytes should be processed (including accessing them as a Stream).

访问这些字节

在你的例子中你指出你想要一个字符串,所以你可以使用 ReadAsStringAsync().

您需要 GetResponse....

Stream receiveStream = response.GetResponseStream ();
StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);
txtBlock.Text = readStream.ReadToEnd();