簡體   English   中英

如何使用httpclient讀取和反序列化對象的IEnumerable

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM