{"record":{"id":"69b0b63f426b6c69","repo":"babalae/better-genshin-impact","slug":"combat-avatar-json-deserialize-failed","errorCode":null,"errorMessage":"combat_avatar.json deserialize failed","messagePattern":"combat_avatar\\.json deserialize failed","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"BetterGenshinImpact/GameTask/AutoFight/Config/DefaultAutoFightConfig.cs","lineNumber":22,"sourceCode":"using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text.Json;\n\nnamespace BetterGenshinImpact.GameTask.AutoFight.Config;\n\npublic class DefaultAutoFightConfig\n{\n    //public static List<CombatAvatar> CombatAvatars { get; set; }\n    public static List<string> CombatAvatarNames { get; set; }\n    public static Dictionary<string, CombatAvatar> CombatAvatarMap { get; set; }\n    public static Dictionary<string, CombatAvatar> CombatAvatarNameEnMap { get; set; }\n    public static FrozenDictionary<string, string> CombatAvatarAliasToNameMap { get; set; }\n\n    static DefaultAutoFightConfig()\n    {\n        var json = File.ReadAllText(Global.Absolute(@\"GameTask\\AutoFight\\Assets\\combat_avatar.json\"));\n        var config = Newtonsoft.Json.JsonConvert.DeserializeObject<IEnumerable<CombatAvatar>>(json) ?? throw new Exception(\"combat_avatar.json deserialize failed\");\n        //CombatAvatars = config;\n        CombatAvatarNames = config.Select(x => x.Name).ToList();\n        CombatAvatarMap = config.ToDictionary(x => x.Name);\n        CombatAvatarNameEnMap = config.ToDictionary(x => x.NameEn);\n        CombatAvatarAliasToNameMap = config.SelectMany(c => c.Alias.Select(a => new KeyValuePair<string, string>(a, c.Name))).ToFrozenDictionary();\n    }\n\n    public static string AvatarAliasToStandardName(string alias)\n    {\n        if (CombatAvatarAliasToNameMap.TryGetValue(alias, out string? name) && name != null)\n        {\n            return name;\n        }\n        throw new Exception($\"角色名称校验失败：{alias}\");\n\n        // return CombatAvatars.Find(x => x.Alias.Contains(alias))?.Name ?? throw new Exception($\"角色名称校验失败：{alias}\");\n    }\n}","sourceCodeStart":4,"sourceCodeEnd":40,"githubUrl":"https://github.com/babalae/better-genshin-impact/blob/a7cb36712dcb409be610257d877fcea3597e9d6b/BetterGenshinImpact/GameTask/AutoFight/Config/DefaultAutoFightConfig.cs#L4-L40","documentation":"Error \"combat_avatar.json deserialize failed\" thrown in babalae/better-genshin-impact.","triggerScenarios":"DefaultAutoFightConfig 静态构造时读取 GameTask\\AutoFight\\Assets\\combat_avatar.json 并反序列化，结果为 null（文件损坏或内容非法）时抛出。","commonSituations":"安装目录中 combat_avatar.json 资源缺失、被杀毒软件破坏或版本更新不完整。","solutions":["重新下载或更新程序，确保 combat_avatar.json 资源文件完整","检查该文件是否被杀毒软件破坏或拦截","手动恢复默认配置文件"],"exampleFix":"重新安装或完整更新 BetterGI，恢复 Assets 下的 combat_avatar.json；不要手动修改该资源文件。","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a7cb36712dcb409be610257d877fcea3597e9d6b","analyzedAt":"2026-08-13T16:44:57.548Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}