C# 如何使用HttpClient读取XML响应?

C# 如何使用HttpClient读取XML响应?,c#,httpclient,C#,Httpclient,显然,HttpClient是新推荐的HTTP请求生成方法,因此我尝试使用它向Delicious API发出请求,该API返回XML响应。以下是我得到的: internal class Program { private static void Main(string[] args) { var credentials = new NetworkCredential("username", "password"); var handler = new

显然,
HttpClient
是新推荐的HTTP请求生成方法,因此我尝试使用它向Delicious API发出请求,该API返回XML响应。以下是我得到的:

internal class Program
{
    private static void Main(string[] args)
    {
        var credentials = new NetworkCredential("username", "password");
        var handler = new HttpClientHandler { Credentials = credentials};
        var client = new HttpClient(handler);

        var suggest = new Uri("https://api.del.icio.us/v1/posts/suggest");

        var suggestions =
            client.GetAsync(suggest.AddQueryParams("url", "https://yahoo.com"))
                .ContinueWith(t => t.Result.Content.ReadAsAsync<DeliciousSuggest>())
                .Unwrap()
                .Result;



        Console.ReadLine();
    }
}

public class DeliciousSuggest
{
    public string[] Popular { get; set; }
    public string[] Recommended { get; set; }
    public string[] Network { get; set; }
}

如何将其解析为可用格式?

“如何将其解析为可用格式?”

    [XmlRoot("suggest")]
public class DeliciousSuggest {
    [XmlElement("popular")]
    public string[] Popular { get; set; }

    [XmlElement("recommended")]
    public string[] Recommended { get; set; }

    [XmlElement("network")]
    public string[] Network { get; set; }
}
并使用XmlSerializer进行反序列化


您应该将del.icio.us的响应作为字符串读回,然后可以按如下方式反序列化它:

var s = "this is the response from del"; 
var buffer = Encoding.UTF8.GetBytes(s); 
using (var stream = new MemoryStream(buffer)) { 
    var serializer = new XmlSerializer(typeof(DeliciousSuggest)); 
    var deliciousSuggest = (DeliciousSuggest)serializer.Deserialize(stream); 
    //then do whatever you want
}

您可以像下面这样将头设置为请求xml。您是说我应该将响应作为字符串读取,并使用
XmlSerializer
作为单独的步骤对其进行解析吗?var s=“这是来自del的响应”;var buffer=Encoding.UTF8.GetBytes(s);使用(var stream=new MemoryStream(buffer)){var serializer=new XmlSerializer(typeof(DeliciousSuggest));var DeliciousSuggest=(DeliciousSuggest)serializer.Deserialize(stream);//然后做任何你想做的事}我认为是肯定的。我用你提供的代码编辑了你的答案,使它更清晰。谢谢你的帮助!
var s = "this is the response from del"; 
var buffer = Encoding.UTF8.GetBytes(s); 
using (var stream = new MemoryStream(buffer)) { 
    var serializer = new XmlSerializer(typeof(DeliciousSuggest)); 
    var deliciousSuggest = (DeliciousSuggest)serializer.Deserialize(stream); 
    //then do whatever you want
}