繁体   English   中英

XML反序列化:根级别的数据无效。 第1行的位置1。尝试了几乎所有内容

[英]XML deserialization: Data at the root level is invalid. Line 1 position 1. Tried almost everything

我正在尝试反序列化XML。 我正在将XML转换为字符串(可以正常工作),但是当我尝试解析它时,却遇到了错误“在根级别的数据无效。第1行位置1”,我尝试了在这里找到的所有内容。 阅读了很多线程并尝试了所有建议:将其读取到字节数组,进行流传输,尝试使用不同的Xml类,删除BOM。

这是我的代码(您可以在代码中的链接下看到XML文件):

public class XmlParser
{
    private List<CurrencyUnit> _currenciesList = new List<CurrencyUnit>();
    public List<CurrencyUnit> CurrenciesList { get => _currenciesList; set => _currenciesList = value; }

    public async void GetXML()
    {
        Uri uri = new Uri("http://api.nbp.pl/api/exchangerates/tables/A/");

        HttpClient client = new HttpClient();


        HttpResponseMessage httpResponse = await client.GetAsync(uri);
        string response = await httpResponse.Content.ReadAsStringAsync();

        XDocument xDocument = XDocument.Parse(response);

        foreach (var element in xDocument.Descendants("Rate"))
        {
            CurrencyUnit unit = new CurrencyUnit();

            unit.Currency = element.Element("Currency").Value.ToString();
            unit.Code = element.Element("Code").Value.ToString();
            unit.Mid = element.Element("Mid").Value.ToString();
            CurrenciesList.Add(unit);
        }
    }
}

这是XML的一部分(您可以在代码的链接下看到整个内容):

 <?xml version="1.0" encoding="UTF-8"?> <ArrayOfExchangeRatesTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ExchangeRatesTable> <Table>A</Table> <No>056/A/NBP/2018</No> <EffectiveDate>2018-03-20</EffectiveDate> <Rates> <Rate> <Currency>bat (Tajlandia)</Currency> <Code>THB</Code> <Mid>0.1100</Mid> </Rate> 

如果请求标头未明确要求XML,则该端点将返回JSON,并且您无法将JSON解析为XML。

您的浏览器默认发送类似于Accept: text/html,[...]application/xml的内容,而HttpClient发送任何内容。 在这种情况下,您将获得JSON作为回报。 如果在调试时检查了response变量,您可能已经看到了。

可以将响应反序列化为JSON,也可以按照强制HttpClient使用Content-Type:text / xml中的说明传递Accept: application/xml请求标头。

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM