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

解决外部API返回JSON中SuggestedUserID的字符串/数组反序列化异常

解决单个字符串/数组反序列化为List的问题

外部API返回的SuggestedUserID字段类型不稳定,可能是单个字符串或字符串数组,直接反序列化为List<string>会抛出异常,你需要修改自定义的ObjectListConverter2<T>转换器,兼容这两种场景。

修改后的转换器代码

public class ObjectListConverter2<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 resultList = new List<T>();

        // 处理单个字符串的情况
        if (reader.TokenType != JsonToken.StartArray)
        {
            var singleItem = serializer.Deserialize<T>(reader);
            resultList.Add(singleItem);
            return resultList;
        }

        // 处理字符串数组的原有逻辑
        var array = JArray.Load(reader);
        foreach (var token in array)
        {
            var item = token.ToObject<T>(serializer);
            resultList.Add(item);
        }
        return resultList;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var list = (List<T>)value;
        serializer.Serialize(writer, list);
    }
}

使用方式

在模型的SuggestedUserID属性上添加转换器特性即可:

public class YourApiResponseModel
{
    [JsonConverter(typeof(ObjectListConverter2<string>))]
    public List<string> SuggestedUserID { get; set; }
}

关键逻辑说明

  • 当JSON令牌不是数组起始标记时,直接将当前值反序列化为单个T类型对象,加入列表返回。
  • 令牌是数组起始标记时,沿用原有逻辑加载数组并逐个反序列化添加到列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:37:13