解决外部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
相关产品推荐
相关产品推荐

