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

如何让JsonConvert.Deserialize/JToken.Parse忽略NULL值使jt["a"]为null?

关于Newtonsoft.Json反序列化时让jt["a"]返回null的实现方案

你的需求是合理的,Newtonsoft.Json默认会把JSON中显式声明的null值解析为JTokenType.Null类型的节点,而不是直接移除对应的键值对,所以才会出现jt["a"] != null但jt["a"].Type == JTokenType.Null的情况。要实现jt["a"] == null,可以通过以下两种方式处理:

方式一:自定义JsonConverter实现自动过滤

编写一个针对JObject的转换器,在反序列化过程中自动移除值为JTokenType.Null的节点:

public class IgnoreNullJTokenConverter : JsonConverter<JObject>
{
    public override JObject ReadJson(JsonReader reader, Type objectType, JObject existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        var jObject = JObject.Load(reader);
        // 筛选出所有值为Null类型的属性并移除
        var nullProperties = jObject.Properties().Where(p => p.Value.Type == JTokenType.Null).ToList();
        foreach (var prop in nullProperties)
        {
            prop.Remove();
        }
        return jObject;
    }

    public override void WriteJson(JsonWriter writer, JObject value, JsonSerializer serializer)
    {
        var filteredObject = new JObject();
        // 序列化时同样过滤Null类型节点
        foreach (var prop in value.Properties())
        {
            if (prop.Value.Type != JTokenType.Null)
            {
                filteredObject.Add(prop);
            }
        }
        filteredObject.WriteTo(writer);
    }
}

使用示例:

string json = "{\"a\":null}";
var settings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter> { new IgnoreNullJTokenConverter() }
};
JToken jt = JsonConvert.DeserializeObject<JToken>(json, settings);
// 此时jt["a"]将返回null

方式二:解析完成后手动过滤

如果不需要全局生效,也可以在解析完成后手动移除所有JTokenType.Null类型的节点:

string json = "{\"a\":null}";
JObject jObject = JObject.Parse(json);
// 批量移除值为Null的属性
jObject.Properties()
        .Where(p => p.Value.Type == JTokenType.Null)
        .ToList()
        .ForEach(p => p.Remove());
// 处理后jObject["a"]返回null

补充说明

Newtonsoft.Json默认的行为是为了区分键不存在和键存在但值为null这两种不同的JSON语义,所以会保留显式声明的null节点。你的需求本质是将这两种情况视为等价,因此需要通过额外的过滤逻辑来实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:13:32