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

标签 c# httpclient

显然 HttpClient 是发出 HTTP 请求的新推荐方式,因此我尝试使用它向 Delicious 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; }
}

但是,它会在 ReadAsAsync 位上引发异常,

Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

也许我错过了一些集会,但这让我觉得很不对劲。返回类型是 XML,而不是 JSON,但我仍然不太确定这个 ReadAsAsync 方法是如何工作的,或者我什至如何指定它。

示例响应如下所示:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<suggest>
<popular>yahoo!</popular>
<popular>yahoo</popular>
<popular>web</popular>
<popular>tools</popular>
<popular>searchengines</popular>
<recommended>yahoo!</recommended>
<recommended>yahoo</recommended>
<recommended>web</recommended>
<network>for:Bernard</network>
<network>for:britta</network>
<network>for:deusx</network>
</suggest>

我怎样才能将它解析成一些可用的格式?

最佳答案

“我怎样才能将它解析成一些可用的格式?”

    [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
}

关于c# - 如何使用 HttpClient 读取 XML 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942486/

相关文章:

c# - 将文本(字符串值)附加到 txt 文件的每一行

c# - MAILKIT 如何将消息移动到文件夹并获取新的 UniqueID

java - Android HttpClient 异步任务

c# - HttpClient 取消不通知服务器取消

api - 具有授权的 Node JS POST 方法

java - Httpclient库登录

java主机名与证书不匹配

c# - 如何访问正在运行的 .net 应用程序

c# - 如果在 Using block 末尾未调用 TransactionScope.Complete,Transaction 会发生什么

c# - 忽略字符串数组的第一项