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}");
}