C# Newtonsoft JSON在合并和/或序列化时删除空属性

C# Newtonsoft JSON在合并和/或序列化时删除空属性,c#,json,json.net,C#,Json,Json.net,考虑以下场景: var s1 = "{\"hello\":\"world\", \"test\":\"somevalue\"}"; var s2 = "{\"hello\":\"world\", \"test\":null}"; var j1 = JObject.Parse(s1); var j2 = JObject.Parse(s2); j1.Merge(j2, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.

考虑以下场景:

var s1 = "{\"hello\":\"world\", \"test\":\"somevalue\"}";
var s2 = "{\"hello\":\"world\", \"test\":null}";

var j1 = JObject.Parse(s1);
var j2 = JObject.Parse(s2);

j1.Merge(j2, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union, MergeNullValueHandling = MergeNullValueHandling.Merge });

var jf = JsonConvert.SerializeObject(j1, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
jf
的结果是
{“hello”:“world”,“test”:null}

如何调用库以使合并结果为:
{“你好”:“世界”}

在这种情况下,我必须递归地遍历结果对象并手动删除空值属性吗?或者有什么魔杖说“序列化时删除这些空值”


我知道
JsonProperty->NullValueHandling
,但这些是我正在处理的动态对象,因此模型是未知的。

您可以像这样从JObject中删除null属性:也相关(可能重复):和。@dbc--是的,这就是我正在寻找的。如果我必须递归地这样做,这就回答了这个问题。我希望已经有了某种东西,但如果这是唯一的办法,那就这样吧。我感谢你的研究。我向你保证,在我发布这篇文章之前,我到处寻找答案!我使用了您共享的这个链接中的答案:@Andy-除非在生成
JToken
时可以抑制
null
值,否则递归修剪它们是当前唯一的方法,因为
JsonConvert.SerializeObject()
实际上不会序列化
JToken
。Json.NET将
JToken
视为已序列化的内容,因此它只是格式化其内容。@dbc——如果您将其作为答案发布,我将接受。再次感谢你的帮助。你的解决方案会让我这边的很多人感到高兴。埃塔:没关系,它被标为傻瓜。