![](/img/trans.png)
[英]Error Loading XML File {“Data at the root level is invalid. Line 1, position 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.