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

C# JsonSerializationException:无法反序列化当前JSON对象问题

问题根源

报错是实体结构、反序列化目标类型和JSON实际结构不匹配导致,另外你的JSON文件里写了单行注释,默认反序列化配置也会触发解析错误,具体不匹配点如下:

  • 反序列化时直接指定目标类型为List<Account>,但JSON根节点是普通对象,不是数组结构,无法直接转成列表
  • 原Account类中把users定义为字符串类型,但实际JSON里users是嵌套对象,该对象的键为动态的用户邮箱,对应值才是真正的账户字段信息
  • JSON内容中包含//Just bug here ill fix later这类单行注释,标准JSON规范不支持注释语法,默认配置下解析会直接失败
修复方案

1. 调整实体类定义

因为users节点下的用户标识是动态的邮箱字符串,没有固定字段名,用字典类型承接即可,正确的实体定义如下:

public class Root
{
    // 键为用户邮箱,值为对应账户信息
    public Dictionary<string, Account> users { get; set; }
}

public class Account
{
    public string username { get; set; }
    public string type { get; set; }
    public string uuid { get; set; }
    public string sessionToken { get; set; }
    public string accessToken { get; set; }
}

2. 修改反序列化逻辑

反序列化目标类型改为上面定义的Root类,同时增加注释忽略配置,兼容你现在JSON里写的注释内容,路径拼接建议用Path.Combine避免斜杠拼接错误:

using (StreamReader r = new StreamReader(Path.Combine(RandomUtils.launcherPath(), "users.json")))
{
    string json = r.ReadToEnd();
    // 配置解析时忽略JSON中的注释
    var jsonSettings = new JsonSerializerSettings
    {
        CommentHandling = CommentHandling.Ignore
    };
    Root parseResult = JsonConvert.DeserializeObject<Root>(json, jsonSettings);
    // 需要拿到所有账户列表时,直接取字典的Value集合即可
    List<Account> accountList = parseResult.users.Values.ToList();
}

提示:如果后续你把JSON里的单行注释删除,就可以不用传入自定义的JsonSerializerSettings配置,直接调用反序列化方法即可。用字典承接动态键的结构后,后续JSON里新增多少个用户账号,都可以正常解析,不需要额外修改实体类。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:51:20