C#中如何将List<Up>转换为Up?反序列化返回类型错误问题
问题解决与需求说明
你的需求完全可行,C#支持返回可迭代的多值对象,报错的核心原因是方法返回类型声明和实际返回的对象类型不匹配:
- 你把
GetUp方法的返回类型定义成了单个Up对象,但反序列化JSON得到的是List<Up>(多个Up对象的集合),编译器自然会报错无法完成类型转换。
修改方案
只需要把方法的返回类型改成List<Up>(或其他可迭代的集合类型),代码就能正常运行:
修改后的GetUp方法:
private List<Up> GetUp() { var json = _fileSystem.File.ReadAllText(localPath); var cur = JsonConvert.DeserializeObject<List<Up>>(json); return cur; }
如果想让方法名更贴合语义,也可以改成GetUpList,可读性会更好:
private List<Up> GetUpList() { var json = _fileSystem.File.ReadAllText(localPath); return JsonConvert.DeserializeObject<List<Up>>(json); }
如何迭代返回的集合
拿到这个集合后,你可以用foreach循环遍历每个Up对象:
var upList = GetUp(); foreach (var up in upList) { Console.WriteLine($"field: {up.field}, oft: {up.oft}"); }
进阶选择:返回IEnumerable<Up>
如果你想让方法返回更抽象的可迭代类型(符合面向接口编程的思路),也可以把返回类型改成IEnumerable<Up>,后续如果需要替换成其他集合类型(比如HashSet<Up>),调用方的代码不需要做任何修改:
private IEnumerable<Up> GetUp() { var json = _fileSystem.File.ReadAllText(localPath); return JsonConvert.DeserializeObject<List<Up>>(json); }
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

