C#反序列化JSON报错:无法将System.String转换为CarsModel类型
问题产生原因
- JSON结构与反序列化目标类型不匹配:你获取到的接口返回值根节点就是纯字符串一维数组,数组内的每个元素都是品牌名称字符串,不存在对象层级结构。但你写的反序列化目标是
List<CarsModel>,Json.NET会尝试将数组中的每一个元素都转换为CarsModel类型的实例,而字符串无法直接映射为包含属性的自定义类对象,因此抛出类型转换异常。 - 序列化特性不匹配:你在实体类上使用的
[JsonPropertyName]是System.Text.Json序列化库的专属特性,而你调用的JsonConvert是Newtonsoft.Json(Json.NET)库的方法,这个特性不会被Newtonsoft.Json识别,即便JSON结构匹配也无法完成属性映射。
修复方法
根据你的实际业务需求二选一即可:
- 场景1:不需要额外包装实体类,直接使用品牌列表
直接将反序列化目标类型改为字符串列表即可,不需要自定义CarsModel类:var carBrands = JsonConvert.DeserializeObject<List<string>>(result); - 场景2:必须使用
CarsModel实体类接收数据
先将JSON读取为字符串列表,再手动赋值给实体类属性即可,同时修正实体类的序列化特性(如果后续仍使用Newtonsoft.Json):
修正后的实体类:
反序列化逻辑:using Newtonsoft.Json; public class CarsModel { [JsonProperty("MyJson")] public List<string>? MyJson { get; set; } }// 先读取根节点的字符串数组 var brandList = JsonConvert.DeserializeObject<List<string>>(result); // 赋值给实体 var carsModel = new CarsModel { MyJson = brandList };
补充说明:如果你预期接口应该返回带
MyJson字段的对象结构,说明接口实际返回格式不符合约定,需要和接口开发方确认返回结构是否正确。
内容的提问来源于stack exchange,提问作者User456
相关产品推荐
相关产品推荐

