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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:33:13