【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}");
}
相关推荐
Jay_Franklin1 小时前
SRIM通过python计算dap
开发语言·python
是一个Bug1 小时前
Java基础50道经典面试题(四)
java·windows·python
Slow菜鸟1 小时前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
消失的旧时光-19432 小时前
401 自动刷新 Token 的完整架构设计(Dio 实战版)
开发语言·前端·javascript
wadesir2 小时前
Rust中的条件变量详解(使用Condvar的wait方法实现线程同步)
开发语言·算法·rust
我是Superman丶2 小时前
《Spring WebFlux 实战:基于 SSE 实现多类型事件流(支持聊天消息、元数据与控制指令混合传输)》
java
tap.AI2 小时前
RAG系列(二)数据准备与向量索引
开发语言·人工智能
廋到被风吹走2 小时前
【Spring】常用注解分类整理
java·后端·spring
阿蒙Amon2 小时前
C#每日面试题-重写和重载的区别
开发语言·c#
是一个Bug2 小时前
Java基础20道经典面试题(二)
java·开发语言