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

如何解决JsonSerializationException?API反序列化类型不匹配报错求助

问题分析与解决方案

错误核心原因

你遇到的反序列化错误本质是类型不匹配:

无法将当前JSON对象(如{"name":"value"})反序列化为类型'System.Collections.Generic.List`1[System.Diagnostics.Activity]',因为该类型需要JSON数组(如[1,2,3])才能正确反序列化。错误路径:'activity',第1行,第12位。

直白来说:你的代码里把activity字段定义成了集合类型(List),但API返回的JSON中activity对应的是单个JSON对象(用{}包裹),而非JSON数组(用[]包裹),导致反序列化器无法匹配类型。


具体解决方法

1. 修改实体类字段类型(最直接推荐)

如果API接口确实只返回单个Activity对象,直接修改实体类中对应字段的类型:

// 修改前
public List<Activity> activity { get; set; }

// 修改后
public Activity activity { get; set; }

修改后重新执行反序列化,类型匹配就能正常解析数据。

2. 兼容单个对象/数组场景(API返回不稳定时用)

如果API有时返回单个对象、有时返回数组,可以通过自定义JSON转换器兼容。以Newtonsoft.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);
        return token.Type == JTokenType.Array 
            ? token.ToObject<List<T>>() 
            : new List<T> { token.ToObject<T>() };
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}
  • 给实体类的activity字段添加转换器属性:
[JsonConverter(typeof(SingleOrArrayConverter<Activity>))]
public List<Activity> activity { get; set; }

这样不管API返回单个对象还是数组,都能正确反序列化为List<Activity>。

3. 临时手动调整JSON(仅应急用)

如果暂时没法修改代码,可以先把API返回的JSON字符串中"activity": {...}替换为"activity": [{...}],将单个对象包裹成数组后再反序列化。但这种硬编码方式容易因API结构变化失效,不推荐长期使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:10:35