Xamarin.iOS调用API并在Label展示数据及报错求助
解决Web引用调用API时的"根级别数据无效"错误
别着急,我刚入门C#的时候也踩过类似的坑!你的问题其实很明确:你用的Web引用(服务引用)默认期望API返回标准的XML格式,但你调用的这个BTC转USD的API返回的是纯文本数字(比如直接返回像"46500.23"这样的内容),没有XML必需的根节点,所以解析器才会报错Data at the root level is invalid. Line 1, position 1.。
最简单的解决方案:改用HttpClient调用
Web引用是为SOAP这类复杂的XML服务设计的,对于这种返回纯文本的简单API,用HttpClient更直接,也更适合新手。步骤如下:
确保项目引用了
System.Net.Http- 如果是.NET Core/.NET 5+项目:默认已经包含,不用额外操作
- 如果是.NET Framework项目:右键项目 → 管理NuGet程序包 → 搜索
System.Net.Http并安装
编写调用代码
直接用下面的示例代码,复制到你的项目里就能运行:using System; using System.Net.Http; using System.Threading.Tasks; class Program { static async Task Main() { // 创建HttpClient实例(记得用using自动释放资源) using (HttpClient client = new HttpClient()) { try { string apiUrl = "https://chasing-coins.com/api/v1/convert/BTC/USD"; // 发送GET请求,直接获取纯文本响应 string priceText = await client.GetStringAsync(apiUrl); Console.WriteLine("当前BTC转USD的价格:" + priceText); // 如果需要把价格转成数字进行计算,用Parse方法 if (decimal.TryParse(priceText, out decimal price)) { Console.WriteLine("转成decimal类型后的价格:" + price); // 这里可以加你自己的计算逻辑,比如乘以数量 } } catch (Exception ex) { Console.WriteLine("调用API时出错:" + ex.Message); } } } }
为什么Web引用会失败?
Web引用会自动生成代理类,默认把API的响应当成XML来解析,但这个API返回的不是XML(没有<root>这类标签),只是一个纯数字字符串,所以XML解析器直接报错了。对于这种轻量级的API,完全没必要用Web引用,HttpClient足够简单好用。
如果之后你遇到返回JSON格式的API,也可以用HttpClient配合Newtonsoft.Json(NuGet包)来解析,比Web引用灵活多啦!
内容的提问来源于stack exchange,提问作者J Buff
相关产品推荐
相关产品推荐

