【发布时间】:2019-03-03 01:37:55
【问题描述】:
你能看出我遗漏了什么明显的东西吗?我正在尝试创建一个调用本地 web api 的单元测试,但我没有得到预期的结果。
我使用的文章资源是here。
[TestMethod]
public void TestAutocomplete()
{
string resource = "api/products?parm=test";
Task<Class1> product = GetProductAsync(resource);
}
async Task<Class1> GetProductAsync(string path)
{
HttpClient client = new HttpClient();
// Update port # in the following line.
client.BaseAddress = new Uri("http://localhost:22292/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(path);
Class1 product = null;
if (response.IsSuccessStatusCode)
{
product = await response.Content.ReadAsAsync<Class1>();
}
return product;
}
...
public class Class1
{
public string text { get; set; }
public string street_line { get; set; }
public string city { get; set; }
public string state { get; set; }
}
更新: 更改后:
Task<Class1> product = GetProductAsync(resource);
到
Class1 product = GetProductAsync(resource).Result;
{"无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'AddressValidationAPI.Tests.Class1' 因为该类型需要 JSON 对象(例如 {\"name\":\"value\"})正确反序列化。\r\n修复 此错误要么将 JSON 更改为 JSON 对象(例如 {\"name\":\"value\"}) 或将反序列化类型更改为数组或 实现集合接口的类型(例如 ICollection、IList) 比如可以从 JSON 数组反序列化的 List。 JsonArrayAttribute 也可以添加到类型中以强制它 从 JSON 数组反序列化。\r\n路径 '',第 1 行,位置 1。"}
【问题讨论】:
-
您遇到了什么问题?出乎意料的是什么?代码运行完全一样。如果您想在不使方法异步的情况下执行该任务,请使用
.Result -
我希望填充 Class1 产品,但它是上面显示的图像。没有地址信息返回。
-
因为您正在返回一个任务。它不是一个产品。您需要执行该任务。要么将方法切换到异步并使用等待,要么使用
GetProductAsync(resource).Result -
@LukeVo,我尝试了 .Result 并得到错误...请参阅底部的 OP。
-
请将请求结果显示为原始 JSON。您可能会发现它以
[开头,它只能反序列化为一个集合(如错误消息所述)。ReadAsync<List<Class1>>()也是如此。
标签: c#