【发布时间】:2017-12-11 22:06:13
【问题描述】:
美好的一天。
我正在尝试向 API 发出 GET 请求。该请求返回一个电话记录数组。
这里是电话类:
public enum OS { Android, IOS, WindowsPhone }
public enum MANIFACTURER { Apple, Nokia, Samsung }
public class Phone
{
public int ID { get; set; }
public string Model { get; set; }
public double Price { get; set; }
public MANIFACTURER Manifacturer { get; set; }
public OS OS { get; set; }
public int RAM { get; set; }
public int Storage { get; set; }
public double ScreenSize { get; set; }
public double CameraResolution { get; set; }
public bool IsAvailable { get; set; }
}
使用 HttpClient,GetStreamAsync 的直接返回包含所需的数据,但不能作为 List 提取(我得到一个空值电话记录数组):
[HttpGet]
public async Task<object> GetPhonesAsync()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetStreamAsync("http://localhost:50002/samsung-api/samsungphones/");
var serializer = new DataContractJsonSerializer(typeof(List<Phone>));
List<Phone> phones = serializer.ReadObject(response) as List<Phone>;
//return response;
return phones;
}
返回是:
[{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false},{"id":0,"model":null,"price":0.0,"manifacturer":0,"os":0,"ram":0,"storage":0,"screenSize":0.0,"cameraResolution":0.0,"isAvailable":false}]
现在如果我返回“响应”而不是“电话”,我会得到:
[{"id":1,"model":"Galaxy J5 Prime","price":569.0,"os":0,"ram":2,"storage":16,"screenSize":5.0,"cameraResolution":13.0,"isAvailable":true},{"id":2,"model":"Galaxy J3 Pro","price":649.0,"os":0,"ram":2,"storage":16,"screenSize":5.0,"cameraResolution":13.0,"isAvailable":false},{"id":3,"model":"Galaxy J7 Core","price":664.0,"os":0,"ram":2,"storage":16,"screenSize":5.5,"cameraResolution":13.0,"isAvailable":true},{"id":4,"model":"Galaxy A3","price":854.0,"os":0,"ram":2,"storage":16,"screenSize":4.7,"cameraResolution":13.0,"isAvailable":true},{"id":5,"model":"Galaxy A5","price":1139.0,"os":0,"ram":3,"storage":32,"screenSize":5.2,"cameraResolution":16.0,"isAvailable":true},{"id":6,"model":"Galaxy A7","price":1329.0,"os":0,"ram":3,"storage":32,"screenSize":5.7,"cameraResolution":16.0,"isAvailable":true},{"id":7,"model":"Galaxy S7 Edge","price":1799.0,"os":0,"ram":4,"storage":32,"screenSize":5.5,"cameraResolution":12.0,"isAvailable":false},{"id":8,"model":"Galaxy S7","price":1899.0,"os":0,"ram":4,"storage":32,"screenSize":5.1,"cameraResolution":12.0,"isAvailable":true},{"id":9,"model":"Galaxy S8","price":2469.0,"os":0,"ram":4,"storage":64,"screenSize":5.8,"cameraResolution":12.0,"isAvailable":true},{"id":10,"model":"Galaxy Note 8","price":2849.0,"os":0,"ram":6,"storage":64,"screenSize":6.3,"cameraResolution":12.0,"isAvailable":true}]
请指出我如何正确地从流中提取 Phone 对象。 非常感谢。
【问题讨论】:
-
Phone类是如何定义的? -
@MarcinJuraszek 添加了。
-
..不等待回复就尝试退回手机?
标签: asp.net stream httpclient