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

JSON反序列化报错:无法将JSON对象转为List<T>类型求助

问题分析

嘿,我一眼就揪出问题所在了!你的反序列化失败完全是因为JSON里的Providers字段格式不统一:

  • 第一个ReviewHistory项的Providers是标准的JSON数组(用[]包裹多个对象),和你ReviewHistory类里List<Provider>的定义匹配;
  • 但第二个ReviewHistory项的Providers是单个JSON对象(仅用{}包裹),Newtonsoft.Json没法把单个对象直接转换成集合类型,所以直接抛出了那个报错。
解决方案

给你两种实用的解决思路,你可以根据实际场景选:

方案1:修正JSON格式(优先推荐,如果你能控制JSON生成)

如果可以调整JSON的输出,把所有单个的Providers对象都改成数组格式——哪怕只有一个元素也用[]包起来。比如把第二个项的Providers改成:

"Providers": [
  {
    "providerId": "1073527099",
    "PCP_License_No": "CDE123",
    "PCP_Name": "baba baba",
    "profDegree": "MD",
    "productCode": "10"
  }
]

这样你的现有代码不需要任何改动,就能正常完成反序列化。

方案2:修改C#模型,兼容单个对象/数组(无法修改JSON时用)

要是JSON格式没法改,我们可以给Providers属性加个自定义JSON转换器,让它既能处理数组,也能自动把单个对象包装成集合。

首先实现一个通用的转换器:

public class SingleOrArrayConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(List<T>);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var token = JToken.Load(reader);
        // 如果是数组,直接转成List<T>
        if (token.Type == JTokenType.Array)
        {
            return token.ToObject<List<T>>();
        }
        // 如果是单个对象,包装成集合返回
        return new List<T> { token.ToObject<T>() };
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        serializer.Serialize(writer, value);
    }
}

然后在ReviewHistory类的Providers属性上标记这个转换器:

public class ReviewHistory
{
    public string reviewId { get; set; }
    [JsonProperty("Providers")]
    [JsonConverter(typeof(SingleOrArrayConverter<Provider>))] // 新增这一行
    public List<Provider> Providers { get; set; }
}

这样不管JSON里的Providers是单个对象还是数组,都能正确反序列化成List<Provider>了。

验证测试

修改完之后再运行你的测试方法,就能顺利把JSON转换成List<ReviewHistory>集合啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:55:00