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

C#反序列化JSON报错:无法将System.String转换为CarsModel类型

问题产生原因
  1. JSON结构与反序列化目标类型不匹配:你获取到的接口返回值根节点就是纯字符串一维数组,数组内的每个元素都是品牌名称字符串,不存在对象层级结构。但你写的反序列化目标是List<CarsModel>,Json.NET会尝试将数组中的每一个元素都转换为CarsModel类型的实例,而字符串无法直接映射为包含属性的自定义类对象,因此抛出类型转换异常。
  2. 序列化特性不匹配:你在实体类上使用的[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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:30:22