C# Telegram Bot令牌处理报错:JSON整数超出Int32范围
修复Telegram Bot的Int32溢出错误
你遇到的Newtonsoft.Json.JsonReaderException错误,核心原因是Telegram返回的机器人ID(6076351611)超过了.NET中Int32类型的最大值(2147483647),而旧版Telegram.Bot库在反序列化时将ID映射为Int32,导致数值溢出。
以下是两种可行的修复方案:
方案1:升级Telegram.Bot库
- 新版Telegram.Bot库已经将所有ID类型从Int32改为了Int64(long),完全支持大数值ID,从根源解决了这个问题。
- 打开NuGet包管理器,找到
Telegram.Bot包,更新到最新稳定版本即可,无需修改现有代码,升级后错误会自动消失。
方案2:手动处理JSON反序列化(无法升级库时使用)
如果受限于环境无法升级依赖,可以绕过库自带的GetMeAsync方法,自己通过HttpClient请求并处理JSON:
首先添加一个手动获取机器人信息的方法:
static async Task<JObject> GetBotInfoManually(string botToken) { using var client = new HttpClient(); var response = await client.GetAsync($"https://api.telegram.org/bot{botToken}/getMe"); response.EnsureSuccessStatusCode(); var jsonContent = await response.Content.ReadAsStringAsync(); return JObject.Parse(jsonContent)["result"] as JObject; }
然后修改Main方法中的GetMeAsync调用:
static async Task Main() { string botToken = "6076351611:AAHOpSdOQl0Mi6WUGFV_otVZH_M81IdplvM"; var botClient = new TelegramBotClient(botToken); // 替换原GetMeAsync调用 var botInfo = await GetBotInfoManually(botToken); Console.WriteLine($"Hello, my name is {botInfo["first_name"]}!"); botClient.OnMessage += Bot_OnMessage; botClient.StartReceiving(); Console.WriteLine("Press any key to exit"); Console.ReadKey(); botClient.StopReceiving(); }
注意
优先选择方案1,升级库不仅能解决当前问题,还能获得Telegram API的新特性和官方修复的其他bug,方案2仅作为临时应急方案使用。
内容的提问来源于stack exchange,提问作者Ilya Bakaev
相关产品推荐
相关产品推荐

