从response.Content.ReadAsStringAsync()

时间:2017-03-03 08:27:58

标签: asp.net asp.net-core

我正在使用asp.net核心web api,我是asp.net核心的新手。我制作一个web api,并希望从Web应用程序控制器调用它,它的工作正常。我的问题是我想在c#对象列表中转换json。我已经从web api获得了json格式,但是可以将其转换为c#对象列表。我谷歌很多,并在任何地方找到一个解决方案,这是

  JsonConvert.DeserializeObject<BusinessUnit>(result);  

哪个不适合我。我的代码:

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetAsync(baseAddress + "/api/BusinessUnit");
var result = response.Content.ReadAsStringAsync();
List<BusinessUnit> businessunits  = JsonConvert.DeserializeObject<BusinessUnit>(result); //result shows error because it needs string as parameter.

我仍在努力但能够解决这个问题。 如何在c#对象列表“businessunits”中转换“result(json format)”?

提前致谢。

3 个答案:

答案 0 :(得分:4)

你需要等待这样的任务:

var result = await response.Content.ReadAsStringAsync();

使用var的危险,因为它现在将类型推断为Task<string>。如果您尝试过:

string result = response.Content.ReadAsStringAsync();

它会立即给您一个错误,指出它无法将Task<string>强制转换为string

编辑:您遇到的另一个错误是,当JSON实际上是一个数组时,您试图将JSON反序列化为对象。

List<BusinessUnit> businessunits = JsonConvert.DeserializeObject<List<BusinessUnit>>(result);

答案 1 :(得分:0)

您可以尝试以下方法:

IEnumerable<BusinessUnit> result = response.Content.ReadAsAsync<IEnumerable<BusinessUnit>>().Result;

Saludos。

答案 2 :(得分:0)

您可以使用.Result转换为字符串:

string XYZ = response.Content.ReadAsStringAsync().Result;