使用WebClient调用服务时获取JSON而不是XML文件

时间:2013-07-14 21:47:05

标签: c# xml webclient

我到处寻找答案,但到目前为止我的问题都没有回答。对于我正在制作的应用程序,我需要从Bukkit.org获取最新的XML工件。现在,如果我手动(通过我的浏览器)保存XML工件然后将其加载到我的程序中,它可以正常工作,为我提供预期的格式化XML文件。

但是,如果我使用WebClient访问该文件,我会遇到问题,因为Webclient下载的文件甚至不是XML格式。我在下面放了一个测试用例。

static void manualLoad()
    {
        //local copy
        XDocument doc = XDocument.Load("artifacts.xml");

        var lol = doc.Descendants("build_number");

        foreach (XElement e in lol)
        {
            Console.WriteLine(e.Value); //correct output
        }
    }

    static void onlineLoad()
    {

        WebClient client = new WebClient();

        //save to local project folder
        client.DownloadFile(new Uri("http://dl.bukkit.org/api/1.0/downloads/projects/bukkit/artifacts/")
            , "C:\\...\\XMLTest\\XMLTest\\bin\\Debug\\lol.xml");

        XDocument doc = XDocument.Load("lol.xml"); //error thrown!


    }

    static void Main(string[] args)
    {
        manualLoad(); //works!
        onlineLoad(); //throws XMLexception: Data at root level is invalid.
        Console.ReadKey();

    }

我尝试访问的XML工件位于:Bukkit.org XML Artifact

1 个答案:

答案 0 :(得分:6)

我还没有尝试过您的代码,但似乎您必须将accept标头设置为application / xml - 看起来默认为json。

修改 您可以在WebClient上设置标题:

client.Headers.Add("accept", "application/xml");