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

C#使用Json.NET反序列化JSON输出数据时出现CS1061报错求助

CS1061报错修复方案

报错根因

你的CObject()方法返回值类型是List<Todos>(即Todos对象的集合),但你在Main方法中直接调用todos.title,试图从列表容器本身访问只有单个Todos实例才具备的title属性,编译器因此抛出"List类型未定义title成员"的错误。

修复步骤

1. 修正集合属性的访问方式

要获取title字段,必须先拿到集合内的单个Todos实例,你可以遍历整个列表输出所有项的标题,也可以通过索引访问指定项。
将Main方法的逻辑替换为如下代码即可解决编译错误:

static void Main(string[] args)
{
    var todos = CObject();
    if (todos != null)
    {
        // 遍历输出所有待办事项的标题
        foreach (var item in todos)
        {
            Console.WriteLine(item.title);
        }
        Console.ReadKey();
    }
}

如果仅需输出第一条待办的标题,直接使用索引访问即可:Console.WriteLine(todos[0].title);

2. 修复数据读取方法的逻辑漏洞

你当前的CObject()方法存在两个会导致运行异常的逻辑问题,即使解决编译错误也无法正常拿到数据:

  • 远程接口拉取逻辑错误:WebClient.DownloadString()会直接返回接口响应的JSON字符串,不是文件路径。你后续用File.Exists(urlfile)、File.ReadAllText(urlfile)的写法,是把整个JSON内容当作本地文件路径做判断,永远不会命中这个分支。
  • 远程拉取到内容后没有做反序列化,也没有返回逻辑,本地文件不存在时方法会直接返回null。
    修正后的CObject()方法代码如下:
static List<Todos> CObject()
{
    string localfile = @"C:\g\todos.json";
    // 优先读取本地缓存文件
    if(File.Exists(localfile))
    {
        return JsonConvert.DeserializeObject<List<Todos>>(File.ReadAllText(localfile));
    }
    // 本地无缓存时拉取远程接口数据
    string remoteJson = new WebClient().DownloadString("https://jsonplaceholder.typicode.com/todos");
    var todos = JsonConvert.DeserializeObject<List<Todos>>(remoteJson);
    // 可选:将拉取到的远程数据写入本地缓存,下次启动无需重复请求接口
    if (todos != null)
    {
        Directory.CreateDirectory(Path.GetDirectoryName(localfile));
        File.WriteAllText(localfile, remoteJson);
    }
    return todos;
}

额外优化建议

你定义的Todos类中,userId使用byte类型、id使用ushort类型,当接口返回的userId超过255、id超过65535时会触发反序列化溢出错误,测试场景下可以正常使用,生产环境建议将这两个字段改为int类型兼容性更好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:36:20