【JToken】JToken == null 判断无效的问题

  if (innerNode == null) 
            {
                continue; 
            }
  Debug.Log($"toNode type: {node["toNode"]?.GetType()}");

发现这个JToken 无法正确的判断 是否为 null,再排除逻辑问题后,我基本能确定的是 这个对象 不返回的不是真正的C# NULL
输出类型后是 Newtonsoft.Json.Linq.JValue
可知 最终 JValue 的 null 不能等于C# 的null
所以
JValue 的特殊性:
当 JSON 中显式定义 “toNode”: null 时,Newtonsoft.Json 会将其解析为 JValue 类型(而非真正的 null)。
此时 node[“toNode”] 是一个 JValue 对象,其 Value 属性为 null,但对象本身非 null。
因此 if (innerNode == null) 会返回 false(因为 JValue 对象存在),导致 continue 未触发。

JToken innerNode = next ? node["toNode"] : node;
if (innerNode == null || innerNode.Type == JTokenType.Null) 
{
    continue; // 正确处理显式 JSON null 值
}
string nodeId = node["id"]?.ToString();
if (nodeId != null)
{
    Debug.Log($"{nodeId},{innerNode},{next}");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值