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
相关产品推荐
相关产品推荐

