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

.NET MAUI中JSON反序列化报错问题求助

问题分析与解决

核心错误原因

你的REST API返回的是JSON数组([{"empname":"JHON DOE"}]),但你在C#代码里尝试把它反序列化成单个EmployeeModel对象,类型完全不匹配,这就是反序列化抛出错误的直接原因。

修复方案

方案1:调整C#代码适配数组返回

把反序列化的目标类型改成数组或列表,再取其中的元素:

async Task LoadEmployee()
{
    try
    {
        string url = "http://192.168.103.11/employee_detail.php";
        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync(url); // 替换.Result为await,避免阻塞线程
        if (response.IsSuccessStatusCode)
        {
            string result = await response.Content.ReadAsStringAsync();
            // 反序列化为EmployeeModel列表
            var empList = JsonConvert.DeserializeObject<List<EmployeeModel>>(result);
            // 因为你的查询只返回一条数据,直接取第一个元素
            if (empList.Count > 0)
            {
                Console.WriteLine(empList[0].empname); // 修正变量引用错误
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

方案2:修改PHP API返回单个对象

如果你的业务逻辑确保这个查询只会返回一条数据,可以直接修改PHP代码,返回单个JSON对象而非数组:

<?php
require_once('koneksi.php');
if ($result = mysqli_query($conn, "SELECT empname FROM master_karyawan WHERE emp_id='M0000'")) {
    $row = $result->fetch_array(MYSQLI_ASSOC);
    mysqli_close($conn);
    echo json_encode($row); // 直接输出单个对象,不再用数组包裹
}

这样你原来的C#反序列化代码(JsonConvert.DeserializeObject<EmployeeModel>(result))就能正常工作,记得把Console.WriteLine(empname)改成Console.WriteLine(emp.empname)即可。

额外优化建议

  • 复用HttpClient:不要每次请求都创建新的HttpClient实例,推荐定义静态单例,避免频繁创建销毁导致的socket资源耗尽问题。
  • 避免同步阻塞:原代码里的client.GetAsync(url).Result会阻塞线程,换成await更符合异步编程规范。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:00:56