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

JToken.DeepEquals比较null值时类型不匹配的问题咨询

这是Newtonsoft.Json的预期行为

核心原因

当给JObject属性赋值string类型的null变量时,Newtonsoft.Json会生成一个类型为JTokenType.String的JValue(其值为null);而直接赋值null字面量或JToken类型的null变量时,会生成类型为JTokenType.Null的JValue。

JToken.DeepEquals会严格比较JToken的类型和值,因此类型不同的两个null会被判定为不相等。

复现代码结果解析

  • jObj["str"]的类型是String(值为null的字符串类型JValue),jObj["tkn"]和jObj["ltrl"]是Null类型的JValue,所以b1、b3返回False,b2返回True。
  • 当JObject被序列化为JSON字符串后,所有类型的null都会被输出为标准的JSON null;反解析时,JSON的null会统一转为JTokenType.Null类型,因此解析后的所有比较都返回True。

解决方案

如果需要统一生成JTokenType.Null类型的JValue,可采用以下方式:

  • 直接使用null字面量赋值,或显式调用JValue.CreateNull()创建null类型的JToken
  • 若从字符串变量赋值,可做null判断后处理:
string nullStr = null;
var jObj = new JObject()
{
    ["str"] = nullStr == null ? JValue.CreateNull() : nullStr
};

内容的提问来源于stack exchange,提问作者Matthew Tenczar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:01:01