从响应中读取Json并将其转换为Json对象

时间:2016-08-29 15:47:56

标签: c# asp.net json asp.net-web-api asp.net-core

所以我从ASP.NET核心应用程序调用Web API。我使用HttpClient并以字符串形式读取它,但我想将其作为JSON对象读取。我知道你可以把它读作Generic class ReadAsAsync<Generic>();但是,返回的对象是一个庞大的JSON对象,为它编写一个Generic类会有很多工作。我的问题是我怎么能把它作为JSON对象阅读?

    public async Task<IActionResult>  SendRequest()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(" https://api.forecast.io/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // HTTP GET
            HttpResponseMessage response = await client.GetAsync("forecast/KEY/");
            if (response.IsSuccessStatusCode)
            {
                var forcast = await response.Content.ReadAsStringAsync();
                Console.WriteLine("{0}", forcast);
                // return Json( JSON ) ; 
            }
        }
        // return Json( JSON ) ; 
    }

我看到三种类型的响应读者,这些都可以成为JSON对象吗?

ReadAsByteArrayAsync, ReadAsStreamAsync, ReadAsStringAsync

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您可以尝试将JSON有效负载解析为JObject,这实际上允许您甚至使用LINQ to JSON。

来自here的示例代码:

JObject o = JObject.Parse(@"{
   'CPU': 'Intel',
   'Drives': [
     'DVD read/writer',
     '500 gigabyte hard drive'
  ]
}");

string cpu = (string)o["CPU"];
// Intel

string firstDrive = (string)o["Drives"][0];
// DVD read/writer

IList<string> allDrives = o["Drives"].Select(t => (string)t).ToList();
// DVD read/writer
// 500 gigabyte hard drive

从技术上讲,这对于您不希望POCO代表您的有效负载的情况更为合适。

Json.net 4.0+实际上也允许你使用动态实例:

dynamic jsonResponse = JsonConvert.DeserializeObject("{\"message\":\"Hi\"}");
jsonResponse.Works = true;
Console.WriteLine(jsonResponse.message); // Hi
Console.WriteLine(jsonResponse.Works); // True
Console.WriteLine(JsonConvert.SerializeObject(jsonResponse)); // {"message":"Hi","Works":true}
Assert.That(jsonResponse, Is.InstanceOf<dynamic>());
Assert.That(jsonResponse, Is.TypeOf<JObject>());

详情请见here