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

为何直接将Int64转为JValue正常,存为object后转换抛InvalidCastException?

问题原因解析

两种转换的本质不一样

  • 第一段代码里的转换,不是直接把Int64强转成JValue,而是Newtonsoft.Json的JValue类型自带了隐式转换运算符:
    编译的时候,编译器会自动调用JValue的隐式转换逻辑,把Int64值包装成JValue实例,相当于偷偷帮你执行了JValue output = JValue.FromObject(Int64Value),所以看起来像是直接强转成功了。

  • 第二段代码的情况完全不同:
    把Int64值存到object变量时,值类型的Int64会被装箱,此时这个object变量里实际装的还是Int64类型的实例,根本不是JValue。当你尝试把这个object强制转成JValue时,CLR会检查实际类型,发现Int64和JValue完全不沾边,自然就抛出InvalidCastException了。

怎么解决这个问题

如果要从装箱的object得到JValue,有两种方式:

  1. 先拆箱回Int64,再利用隐式转换:
JValue output1 = (Int64)Int64ValueInObject;
  1. 直接用JValue的FromObject方法,不管输入是什么类型都能正确转换:
JValue output1 = JValue.FromObject(Int64ValueInObject);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:42:51