从response.Content.ReadAsStringAsync()获取C#对象列表

3 asp.net asp.net-core

我在asp.net核心网络api上工作,而我在asp.net核心中是新手。我制作了一个Web API,想从Web应用程序控制器中调用它,并且效果很好。我的问题是我想在c#对象列表中转换json。我已经从Web API获得json格式,但是可以将其转换为c#对象列表。我在Google上搜索了很多,然后在各处找到一种解决方案,那就是

  JsonConvert.DeserializeObject<BusinessUnit>(result);  
Run Code Online (Sandbox Code Playgroud)

这对我不起作用。我的代码:

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.
Run Code Online (Sandbox Code Playgroud)

我仍在尝试,但可以解决此问题。如何在c#对象列表“ businessunits”中转换“结果(json格式)”?

提前致谢。

juu*_*nas 9

您需要像这样等待任务:

var result = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

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

string result = response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

它会立即给您一个错误,它无法Task<string>转换string

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

List<BusinessUnit> businessunits = JsonConvert.DeserializeObject<List<BusinessUnit>>(result);
Run Code Online (Sandbox Code Playgroud)

  • 这来自JSON反序列化,这意味着您正在尝试将数组放入对象中。如果要获取一个BusinessUnits数组,则可以执行以下操作:JsonConvert.DeserializeObject &lt;List &lt;BusinessUnit &gt;&gt;(result);` (2认同)

Ser*_*gan 5

这样.NET Core做是这样的:

var units = await result.Content.ReadFromJsonAsync<List<BusinessUnit>>();
Run Code Online (Sandbox Code Playgroud)