You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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更直接,也更适合新手。步骤如下:

  1. 确保项目引用了System.Net.Http

    • 如果是.NET Core/.NET 5+项目:默认已经包含,不用额外操作
    • 如果是.NET Framework项目:右键项目 → 管理NuGet程序包 → 搜索System.Net.Http并安装
  2. 编写调用代码
    直接用下面的示例代码,复制到你的项目里就能运行:

    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:04:40