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

C#中将同类型JSON字符串数组转为List<T>的报错问题

解决Flurl解析嵌套JSON字符串数组到List的转换错误

你的问题根源很明确:API返回的不是直接的对象数组,而是包含JSON字符串的字符串数组。Flurl的GetJsonAsync<List<TaskStruct>>()会默认把响应里的每个数组元素当成TaskStruct类型的对象解析,但实际上每个元素都是字符串格式的JSON,自然会抛出"无法将String转换为TaskStruct"的异常。

修复方案

先把响应解析成字符串数组,再逐个将每个JSON字符串反序列化成TaskStruct:

使用System.Text.Json(.NET Core/.NET 5+ 默认)

using System.Text.Json;

public async static Task<List<TaskStruct>> GetTasks()
{
    // 第一步:获取API返回的字符串数组
    var jsonStringArray = await $"{BASE}tasks/".GetJsonAsync<List<string>>();
    
    // 第二步:逐个反序列化每个JSON字符串到TaskStruct
    var taskList = new List<TaskStruct>();
    foreach (var jsonStr in jsonStringArray)
    {
        var task = JsonSerializer.Deserialize<TaskStruct>(jsonStr);
        taskList.Add(task);
    }
    
    return taskList;
}

使用Newtonsoft.Json(Json.NET)

如果你的项目用的是Newtonsoft.Json,代码类似:

using Newtonsoft.Json;

public async static Task<List<TaskStruct>> GetTasks()
{
    var jsonStringArray = await $"{BASE}tasks/".GetJsonAsync<List<string>>();
    var taskList = new List<TaskStruct>();
    
    foreach (var jsonStr in jsonStringArray)
    {
        var task = JsonConvert.DeserializeObject<TaskStruct>(jsonStr);
        taskList.Add(task);
    }
    
    return taskList;
}

额外说明

  • 确保TaskStruct的属性名称和JSON字符串里的字段完全匹配(大小写敏感场景下可通过[JsonPropertyName]/[JsonProperty]特性做字段映射)
  • 如果JSON里的id字段你不需要,结构体里不用定义,序列化器会自动忽略不存在的属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:35:21