C# 将object类型数组字符串转List<string> 解决转换返回null问题
错误原因分析
- 直接强转
(List<string>)value失败:只有value的运行时类型本身就是List<string>时才会成功。你打印出的{["Temp", "Humidity"]}格式明显是JSON数组类的实例(最常见为Newtonsoft.Json的JArray类型,或System.Text.Json的JsonElement数组类型),不是原生List<string>,所以强转失败。 value.OfType<List<string>>().ToList()用法错误:OfType<T>是IEnumerable接口的扩展方法,作用是筛选集合中类型为T的元素,而非将整个集合转换为T类型。且如果value没有实现IEnumerable接口,该调用本身就不生效。
正确转换方案
场景1:value为Newtonsoft.Json的JArray类型(最常见场景,匹配你给出的打印格式)
// 先转成JArray,再调用内置的序列化方法转List<string> var jArray = value as Newtonsoft.Json.Linq.JArray; List<string> res = jArray?.ToObject<List<string>>();
场景2:value为任意实现了IEnumerable接口的字符串集合(比如string数组、ArrayList、其他自定义集合)
// 先转成可枚举类型,遍历每个元素转string后生成List var enumerable = value as System.Collections.IEnumerable; List<string> res = enumerable?.Cast<object>() .Select(x => x?.ToString()) .ToList();
场景3:value是原始JSON字符串
如果你的value是存了["Temp","Humidity"]的字符串,直接用JSON反序列化即可:
// Newtonsoft.Json写法 List<string> res = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(value.ToString()); // System.Text.Json写法 List<string> res = System.Text.Json.JsonSerializer.Deserialize<List<string>>(value.ToString());
内容的提问来源于stack exchange,提问作者tu pham
相关产品推荐
相关产品推荐

