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
}