【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}");
}
相关推荐
华仔啊4 小时前
MyBatis-Plus 让你开发效率翻倍!新手也能5分钟上手!
java·后端·mybatis
洛克希德马丁4 小时前
Qt 配置Webassemble环境
开发语言·qt·webassembly·emscripten·emsdk
武子康4 小时前
Java-167 Neo4j CQL 实战:CREATE/MATCH 与关系建模速通 案例实测
java·开发语言·数据库·python·sql·nosql·neo4j
自由的好好干活4 小时前
C#桌面框架与Qt对比及选型(国产操作系统开发视角)
开发语言·qt·c#
upward_tomato4 小时前
python中模拟浏览器操作之playwright使用说明以及打包浏览器驱动问题
开发语言·python
lsx2024064 小时前
jEasyUI 合并单元格详解
开发语言
乌暮4 小时前
JavaEE入门--计算机是怎么工作的
java·后端·java-ee
散峰而望4 小时前
C++入门(算法) - 习题
开发语言·c++·算法·github
Z3r4y4 小时前
【代码审计】RuoYi-4.2 五处安全问题分析
java·web安全·代码审计·若依4.2·ruoyi-4.2
在下胡三汉4 小时前
创建轻量级 3D 资产 - Three.js 中的 GLTF 案例
开发语言·javascript·3d