![](/img/trans.png)
[英]Deserialize HTTPClient.ReadAsAsync results into a List of Objects
[英]How to read and deserialize IEnumerable of objects with httpclient
我在讀取和反序列化來自簡單Web API的HTTP響應時遇到問題,該Web API假定返回ContactDto對象的IEnumerable。 在contentReader.Read()
行中,我收到如下錯誤:
“根級別的數據無效。第1行的位置1。”
控制器獲取代碼:
[HttpGet]
// GET api/<controller>
public IEnumerable<ContactDto> Get()
{
return new List<ContactDto>()
{
new ContactDto()
{
DateOfBirth = DateTime.Today,
FirstName = "tmp",
LastName = "tmp"
}
};
}
型號代碼:
public class ContactDto
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime DateOfBirth { get; set; }
}
使用HttpClient讀取和解析:
public IEnumerable<ContactDto> Read()
{
var serializer = new XmlSerializer(typeof(ContactDto));
var client =new HttpClient();
var stream = client.GetStreamAsync(_feedUrl).Result;
using (var streamReader = new StreamReader(stream))
{
using (var contentReader = new XmlTextReader(streamReader))
{
while (contentReader.Read())
{
var innerEventXml = contentReader.ReadAsString();
using (var stringReader = new StringReader(innerEventXml))
{
yield return (ContactDto) serializer.Deserialize(stringReader);
}
}
}
}
}
在Get
操作中返回對象列表會在調用它時產生JSON結果,而不是XML結果。
您可以使用Newtonsoft.Json反序列化它,例如:
string result = client.GetStringAsync().Result;
return JsonConvert.Deserialize<List<ContactDto>>(result);
雖然我建議您將await
用於異步方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.