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

Newtonsoft JSON合并/序列化时如何移除动态对象的空属性?

解决动态对象序列化时自动移除空值属性的问题

嘿,这个场景我太熟了!完全不需要手动递归遍历移除空值属性,Newtonsoft JSON(Json.NET)提供了现成的序列化配置,能直接帮你搞定未知模型的动态对象空值过滤需求。

具体实现步骤

只需要在序列化时配置JsonSerializerSettings的NullValueHandling属性为NullValueHandling.Ignore,就能自动丢弃所有值为null的属性:

// 假设你的动态对象jf是ExpandoObject类型(动态对象常见实现)
dynamic jf = new ExpandoObject();
jf.hello = "world";
jf.test = null;

// 配置序列化规则
var serializerSettings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
};

// 执行序列化
string outputJson = JsonConvert.SerializeObject(jf, serializerSettings);
// 最终输出结果:{"hello":"world"}

针对疑问的详细解答

  • 要不要手动递归处理? 完全不用!上面的配置会自动递归处理对象的所有层级(就算动态对象有嵌套结构也能生效),帮你过滤所有null值属性,省掉了自己写递归逻辑的麻烦。
  • JsonProperty的NullValueHandling为什么不适用? 这个特性是给静态模型类的属性加的标记,比如你提前定义了一个实体类,给某个属性加[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]。但你现在处理的是未知模型的动态对象,没法给动态生成的属性加特性,所以全局的JsonSerializerSettings才是适配这种场景的最优解。

额外小提示

如果之后遇到需要针对特定空值做保留/忽略的差异化需求,还可以结合DefaultValueHandling等其他配置调整,但针对你当前的需求,上面的代码就足够完美解决问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:56:30